[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