[dmd-beta] dmd 1.074 and 2.059 beta 5

David Simcha dsimcha at gmail.com
Wed Apr 11 20:02:34 PDT 2012


Ok, but I downloaded the new beta and changed closureOf to:

template closureOf( T ) {
     static if( isScalar!(Unqual!T) ) {
         enum closureOf = Closure.Scalar;
     } else {
         enum closureOf = T.closure;
     }
}

where isScalar is defined as:

template isScalar( T ) {
     enum isScalar = !is( T == class ) &&
         is( typeof((){
             T x;// = MinusOne!T;
             T y = x;
             T z;

             if( x == x || x != x ) {
                 x = x;
                 x += x; x -= x; x /= x; x *= x;
                 x = x + x; x = x - x; x = x / x;
             }
         }()) );
}


It still gives a "possible circular dependency" error message.  Any clue 
why?

On 4/11/2012 3:44 PM, Walter Bright wrote:
> 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.
>
> _______________________________________________
> dmd-beta mailing list
> dmd-beta at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/dmd-beta
>



More information about the dmd-beta mailing list