struct S { int x; } class C { int x; } union U { int x; } alias Tuple!(S.tupleof) ST; alias Tuple!(C.tupleof) CT; alias Tuple!(U.tupleof) UT; All of those instantiations give the error "Error: tuple is not a valid template value argument". No, but I'd suppose being tuples that they'd be valid _tuple_ arguments, Mr. Compiler!
struct Point { int x; int y; } void main () { Point p; mixin Foo!(p.x); // works (prints "x" at compile time) mixin Foo!(Point.x); // works (prints "x" at compile time) mixin Foo!(p.tupleof[0]); // Error: expression (Point).x is not a valid template value argument (but still prints "(Point).x" at compile time) mixin Foo!(Point.tupleof[0]); // Error: expression (Point).x is not a valid template value argument (but still prints "(Point).x" at compile time) } template Foo (alias a) { pragma (msg, a.stringof); } Shouldn't p.x and p.tupleof[0] work the same way ? tested on DMD 2.036
This issue has been fixed in D2. Closing as WORKSFORME.