On Saturday, August 04, 2012 15:22:34 Jonathan M Davis wrote: > On Sunday, August 05, 2012 00:15:02 Timon Gehr wrote: > > T fun(T)(T arg) if(isSomeString!arg){ > > > > return arg~arg[0]; > > > > }
> Though honestly, I'd argue that the compiler should treat arg ~ arg[0] as > being string rather than the enum type anyway, since it makes no sense to > get a new enum value by concatenating to an existing one. The new one > probably isn't a valid enum value. It's the same problem that we get when > we allow bit manipulation on enum types (which should also be disallowed > IMHO). So, I think that that's more of a problem with enums than > isSomeString. Okay. I responded to that too quickly and mixed myself up a bit. The compiler already behaves this way. It unfortunately does type return arg ~ arg; as the enum type, but it correctly marks return arg ~ arg[0]; as being a string, which does result in breakage. But the alternative right now is that using isSomeString breaks _all_ cases where an enum is passed rather than just some. So, no, having isSomeString work with enums isn't perfect, but I still think that it's better than the current situation. - Jonathan M Davis