https://issues.dlang.org/show_bug.cgi?id=21190
RazvanN <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #1 from RazvanN <[email protected]> --- (In reply to Steven Schveighoffer from comment #0) > When a string is generated at compile time (and assigned to an enum), it > should be equivalent to a string literal in all cases. > > This works today: > > enum x = "hello"; > const char *p = x; > enum x2 = "hello" ~ " there"; > p = x2; > static string foo() > { > return "hello" ~ " there"; > } > > enum x3 = foo(); > p = x3; > > This does not: > > static string foo2() > { > import std.string : join; > return ["hello", "there"].join(" "); > } > > enum x4 = foo2(); > p = x4; // Error: cannot implicitly convert expression "hello there" of type > string to const(char*) > > It's unclear why foo2 cannot produce a convertible string, whereas all the > other cases can. Are you sure this is the correct code? I just tried running the following example: enum x = "hello"; const char *p = x; enum x2 = "hello" ~ " there"; static string foo() { return "hello" ~ " there"; } enum x3 = foo(); static string foo2() { import std.string : join; return ["hello", "there"].join(" "); } enum x4 = foo2(); void goo() { p = x2; p = x3; p = x4; } And I get errors to all three assignments of p. --
