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

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.

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

I imagine once x gets into the template all the compiler knows about it
is its type.
-Joel

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

I imagine once x gets into the template all the compiler knows about it is
its type.

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