[Issue 15623] New: is(M!N) evaluates to true for M!N that fails to instantiate.
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Fri Jan 29 09:00:24 PST 2016
    
    
  
https://issues.dlang.org/show_bug.cgi?id=15623
          Issue ID: 15623
           Summary: is(M!N) evaluates to true for M!N that fails to
                    instantiate.
           Product: D
           Version: D2
          Hardware: x86_64
                OS: All
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: epi at atari8.info
struct HasFoo { void foo() {} }
struct NoFoo {}
struct CallsFoo(T) {
    T t;
    void bar() { t.foo(); }
}
static assert(is(CallsFoo!HasFoo));
static assert(is(typeof({ alias Baz = CallsFoo!HasFoo; return Baz.init; }())));
static assert(__traits(compiles, { alias Baz = CallsFoo!HasFoo; return
Baz.init; }()));
alias Bar = CallsFoo!HasFoo;
// this should fail:
static assert(is(CallsFoo!NoFoo));
// this should fail too:
static assert(is(typeof({ alias Baz = CallsFoo!NoFoo; return Baz.init; }())));
// this too:
static assert(__traits(compiles, { alias Baz = CallsFoo!NoFoo; return Baz.init;
}()));
// only this fails:
//alias Baz = CallsFoo!NoFoo;      // (1)
--
    
    
More information about the Digitalmars-d-bugs
mailing list