[dmd-beta] dmd 1.074 and 2.059 beta 5

Walter Bright walter at digitalmars.com
Wed Apr 11 12:44:56 PDT 2012


I looked into special case resolving the:

template closureOf() {
   static if (is(typeof({
     BasicVector x;
     x.bar(x);
   }))) {}
   enum closureOf = 1;
}

as being an eponymous template anyway, since the static if adds no members, but 
if I look at scid I see:

template closureOf( T ) {
         static if( isScalar!(Unqual!T) ) {
                 enum closureOf = Closure.Scalar;
         } else static if( is( typeof(T.closure) : Closure ) ) {
                 enum closureOf = T.closure;
         } else {
                 static assert( false, T.stringof ~ " is not a valid expression." );
         }
}

and such a fix won't help scid. It cannot figure out which branch of static if 
to use because it is circular, and so it won't know the type of the eponymous 
template, so it cannot proceed to initialize lhsClosure, and so fails.



More information about the dmd-beta mailing list