[Issue 21124] New: Multiple templated is expressions used with logical operators
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Aug 5 20:36:23 UTC 2020
https://issues.dlang.org/show_bug.cgi?id=21124
Issue ID: 21124
Summary: Multiple templated is expressions used with logical
operators
Product: D
Version: D2
Hardware: x86
OS: Linux
Status: NEW
Severity: enhancement
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: john.michael.hall at gmail.com
The code below fails to compile because the template parameter U is in both is
statements in isFoo. The code for isFoo2, which changes the U in the second is
statement, compiles without error.
I see nothing in the specification that would suggest that isFoo should fail to
compile, though I may have missed it. Nevertheless, there is a workaround.
struct Foo(T)
{
T x;
}
struct Foo(T, U)
{
T x;
}
enum bool isFoo(T) = is(T : Foo!(U), U) || is(T : Foo!(U, V), U, V);
enum bool isFoo2(T) = is(T : Foo!(U), U) || is(T : Foo!(W, V), W, V);
void main()
{
static assert(isFoo!(Foo!(int)));
static assert(isFoo!(Foo!(int, int)));
static assert(isFoo2!(Foo!(int)));
static assert(isFoo2!(Foo!(int, int)));
}
--
More information about the Digitalmars-d-bugs
mailing list