[Issue 19145] New: template alias with same name in function doesn't re-instantiate
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Aug 6 12:33:49 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=19145
Issue ID: 19145
Summary: template alias with same name in function doesn't
re-instantiate
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Keywords: wrong-code
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: schveiguy at yahoo.com
If I define 2 variables in the same function with the same name using separate
scopes, the compiler treats them as the same alias when passing to templates:
// using old template style to work with older versions
template isInt(alias var)
{
pragma(msg, "instantiated with " ~ typeof(var).stringof);
enum isInt = is(typeof(var) == int);
}
void main()
{
{
int item;
static assert(isInt!item);
}
{
long item;
static assert(!isInt!item); // failure all the way back to 2.060
}
}
The pragma prints only ONCE, and only prints the first type.
Just for sanity, I reversed the tests, and it's the same thing:
void main()
{
{
long item;
static assert(!isInt!item);
}
{
int item;
static assert(isInt!item); // fails
}
}
--
More information about the Digitalmars-d-bugs
mailing list