[Issue 21190] generated strings should convert to immutable char *

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Sep 17 07:55:04 UTC 2020


https://issues.dlang.org/show_bug.cgi?id=21190

RazvanN <razvan.nitu1305 at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |razvan.nitu1305 at gmail.com

--- Comment #1 from RazvanN <razvan.nitu1305 at gmail.com> ---
(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.

--


More information about the Digitalmars-d-bugs mailing list