www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 5980] New: Can't pass __traits value as const(char)*

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980

           Summary: Can't pass __traits value as const(char)*
           Product: D
           Version: future
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: Jesse.K.Phillips+D gmail.com
                CC: Jesse.K.Phillips+D gmail.com



11:03:10 PDT ---
This worked in 2.052 but is failing to compile in the latest beta for 2.053.
This is used by LuaD.

struct A {
    int a;
}
void main() {
    foreach(field; __traits(allMembers, A))
    {    
            usefield(field);
    }

}

void usefield(const(char)* foo) {
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 11 2011
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980




11:09:35 PDT ---
Oh and the error message:

break.d(7): Error: cannot implicitly convert expression (field) of type
const(im
mutable(char)[]) to const(char)*

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 11 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980


kennytm gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kennytm gmail.com




 This worked in 2.052 but is failing to compile in the latest beta for 2.053.
 This is used by LuaD.
 
 struct A {
     int a;
 }
 void main() {
     foreach(field; __traits(allMembers, A))
     {    
             usefield(field);
     }
 
 }
 
 void usefield(const(char)* foo) {
 }
Why not use 'usefield(field.ptr)'? I don't think implicitly converting an array to a pointer is expected. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 11 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980




11:33:58 PDT ---
Well I invasion the code being expanded to:

void main() {
   usefield("a");
}

Which is expected to implicitly convert to const(char)*

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 11 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980


Andrei Alexandrescu <andrei metalanguage.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrei metalanguage.com



12:29:17 PDT ---
The conversion of a string literal to a immutable(char)* has been disallowed,
and for arguably good reasons. You may want to use a.ptr instead.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 11 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980


kennytm gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Can't pass __traits value   |foreach element of a type
                   |as const(char)*             |tuple of string literals is
                   |                            |not implicitly convertible
                   |                            |to immutable(char)*



Actually it's a problem in foreach-ing a TupleExp of StringExp, not __traits. I
changed the title to reflect that.

-------------------------------------
template TypeTuple(T...) {
    alias T TypeTuple;
}
void main() {
    alias TypeTuple!"1" T;
    usefield(T[0]);     // ok
    foreach (j; T)
        usefield(j);    // error on 2.053
}
void usefield(const(char)* foo) {
}
-------------------------------------

(Still, I think it's better to use .ptr then relying on it the implicit string
literal -> pointer conversion.)

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 11 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980





 The conversion of a string literal to a immutable(char)* has been disallowed,
 and for arguably good reasons. You may want to use a.ptr instead.
-- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 11 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980




12:44:19 PDT ---
I must be confused, sorry.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 11 2011
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=5980


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |yebblies gmail.com
         Resolution|                            |FIXED



Fixed in 2.055 beta, probably the same as issue 6220.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 06 2011