digitalmars.D.learn - typeof alias in templates
- bearophile (15/15) Jul 20 2008 In a template I need both the name and type of a given variable, but I h...
- Jarrett Billingsley (6/23) Jul 20 2008 It's got to be a bug. If you put "pragma(msg, A.stringof);" in Foo, you...
- JAnderson (4/23) Jul 21 2008 I imagine once x gets into the template all the compiler knows about it
- Jarrett Billingsley (3/29) Jul 21 2008 See my post.
- Don (5/24) Jul 22 2008 A bug. Workaround:
- bearophile (4/8) Jul 22 2008 Thank you, this workaround is very short and usable, it avoids me to use...
In a template I need both the name and type of a given variable, but I have found a problem that can be shown with this simple code: template Bar(string name) { pragma(msg, name); } template Foo(alias A) { alias Bar!(A.stringof) Foo; } void main() { int x = 10; alias Foo!(x) Nothing; } I'd like this code to print "x" instead of "int". Is this a bug of DMD V.1.033? (At the moment I have solved the problem giving the template the name of the variable, and then finding its type with typeof(mixin("name")), but it's a less elegant solution). Bye, bearophile
Jul 20 2008
"bearophile" <bearophileHUGS lycos.com> wrote in message news:g5vi9l$1eok$1 digitalmars.com...In a template I need both the name and type of a given variable, but I have found a problem that can be shown with this simple code: template Bar(string name) { pragma(msg, name); } template Foo(alias A) { alias Bar!(A.stringof) Foo; } void main() { int x = 10; alias Foo!(x) Nothing; } I'd like this code to print "x" instead of "int". Is this a bug of DMD V.1.033? (At the moment I have solved the problem giving the template the name of the variable, and then finding its type with typeof(mixin("name")), but it's a less elegant solution).It's got to be a bug. If you put "pragma(msg, A.stringof);" in Foo, you'll notice it prints x and not int. A workaround is, in Foo, to assign A.stringof to a constant and then pass that constant as the template argument to Bar.
Jul 20 2008
bearophile wrote:In a template I need both the name and type of a given variable, but I have found a problem that can be shown with this simple code: template Bar(string name) { pragma(msg, name); } template Foo(alias A) { alias Bar!(A.stringof) Foo; } void main() { int x = 10; alias Foo!(x) Nothing; } I'd like this code to print "x" instead of "int". Is this a bug of DMD V.1.033? (At the moment I have solved the problem giving the template the name of the variable, and then finding its type with typeof(mixin("name")), but it's a less elegant solution). Bye, bearophileI imagine once x gets into the template all the compiler knows about it is its type. -Joel
Jul 21 2008
"JAnderson" <ask me.com> wrote in message news:g6286p$20q$1 digitalmars.com...bearophile wrote:See my post.In a template I need both the name and type of a given variable, but I have found a problem that can be shown with this simple code: template Bar(string name) { pragma(msg, name); } template Foo(alias A) { alias Bar!(A.stringof) Foo; } void main() { int x = 10; alias Foo!(x) Nothing; } I'd like this code to print "x" instead of "int". Is this a bug of DMD V.1.033? (At the moment I have solved the problem giving the template the name of the variable, and then finding its type with typeof(mixin("name")), but it's a less elegant solution). Bye, bearophileI imagine once x gets into the template all the compiler knows about it is its type.
Jul 21 2008
bearophile wrote:In a template I need both the name and type of a given variable, but I have found a problem that can be shown with this simple code: template Bar(string name) { pragma(msg, name); } template Foo(alias A) { alias Bar!(A.stringof) Foo; } void main() { int x = 10; alias Foo!(x) Nothing; } I'd like this code to print "x" instead of "int". Is this a bug of DMD V.1.033? (At the moment I have solved the problem giving the template the name of the variable, and then finding its type with typeof(mixin("name")), but it's a less elegant solution). Bye, bearophileA bug. Workaround: template Foo(alias A) { alias Bar!(A.stringof ~ "") Foo; }
Jul 22 2008
Don:A bug. Workaround: template Foo(alias A) { alias Bar!(A.stringof ~ "") Foo; }Thank you, this workaround is very short and usable, it avoids me to use another template :-) Bye, bearophile
Jul 22 2008