Don <> changed:

           What    |Removed                     |Added
                 CC|                            |

--- Comment #1 from Don <> 2012-10-19 04:14:25 PDT ---
The error is not coming from __traits(compiles), it happens while generating
the obj file.
If you compile with dmd -c -o-
then no error occurs.

The error message itself should I think be regarded as an internal compiler
Here's the root cause.

struct S { static void g() { } static int w;}
void main()
     S s;
     auto k = &s.g;
     pragma(msg, typeof(&s.g));
This compiles with -c -o-

According to the pragma, &s.g is a delegate. But, since g is a static function,
it cannot be a valid delegate. The error is detected only at the glue layer.

I believe that &s.g should be a function pointer, and s should be ignored,
since already:
int *x = &s.w; // accepted, s is ignored
s.g();         // accepted, s is ignored.

This would mean the __traits in the original code would continue to return
true, but the function f!"g"() would actually be valid and would return a
function pointer, not a delegate.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to