Bug 1714 – Type specialization in IsExpression should work for templated types
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Linux
Creation time
2007-12-04T15:33:00Z
Last change time
2015-06-09T01:14:23Z
Keywords
spec
Assigned to
nobody
Creator
dhasenan
Comments
Comment #0 by dhasenan — 2007-12-04T15:33:40Z
class Bar (T) {}
static if (is (Bar!(int) T == T!(U), U)) // should evaluate to true, U == int, T == ? probably Bar!(int)
{}
class Foo : Bar!(int) {}
static if (is (Foo T == T!(U), U)) // should evaluate to false
{}
static if (is (Foo T : T!(U), U)) // should evaluate to true, U == int
{}
Currently, you can do similar stuff in template specializations, but it should be extended to IsExpressions, according to the documentation. So it's implied, anyway.
Comment #1 by clugdbug — 2010-11-08T04:47:03Z
The syntax was slightly wrong. Using correct syntax, as shown below, it failed on all versions of DMD up to and including 2.048. It was fixed in 2.049.
class Bar (T) {}
static if (is (Bar!(int) T == W!(U), alias W, U))
{
pragma(msg, W.stringof);
pragma(msg, U.stringof);
} else static assert(0);
class Foo : Bar!(int) {}
static if (is (Foo T == W!(U), alias W, U))
{
static assert(0);
}
static if (is (Foo T2 : W2!(U2), alias W2, U2))
{
pragma(msg, W2.stringof);
pragma(msg, U2.stringof);
} else static assert(0);
Comment #2 by simen.kjaras — 2010-11-08T05:22:16Z
See also bug 3608, which is definitely related, but concerns variadic template lists.