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
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta
_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta