This code
enum E : string { a = "hello" }
void main()
{
E e = E.a ~ " world";
E f = E.a ~ 'w';
}
gives this compilation error:
q.d(6): Error: cannot implicitly convert expression ("hellow") of type string to E
So, the compiler correctly recognizes that the result of appending a character to an E results in a string rather than an E. However, it should _also_ fail on appending a string to it. "hello world" is not a valid E, and appending an arbitrary string to an enum of type string is not generally going to result in a valid enum value, so the result should be typed as string, not the enum type.
If an operation on an enum type is not _guaranteed_ to result in a valid enum value, then that operation should be illegal, forcing the programmer to cast when they're sure that the result is valid and protecting them from invalid assignments like in the example above.
Comment #1 by github-bugzilla — 2013-05-19T15:46:02Z