digitalmars.D.learn - compile time opCall array assignment
struct S{ int[2] arr = 0; static S opCall( int i1_, int i2_) { S res = void; res.arr[0] = i1_; res.arr[1] = i2_; return res; } } const S CS= S(0,0); Why can't this be evaluated at compile time? (And how do I fix it :))
Feb 25 2010
strtr wrote:struct S{ int[2] arr = 0; static S opCall( int i1_, int i2_) { S res = void; res.arr[0] = i1_; res.arr[1] = i2_; return res; } } const S CS= S(0,0); Why can't this be evaluated at compile time? (And how do I fix it :))Because expressions of the form a.b[i]= c aren't yet supported in CTFE. It will work in a couple of compiler releases from now. Workaround: int[2] x; x[0]=i1_; x[1]=i2_; res.arr=x;
Feb 25 2010
Don Wrote:Because expressions of the form a.b[i]= c aren't yet supported in CTFE. It will work in a couple of compiler releases from now.Only D2, or D1 as well?Workaround: int[2] x; x[0]=i1_; x[1]=i2_; res.arr=x;:)
Feb 26 2010
strtr wrote:Don Wrote:Both.Because expressions of the form a.b[i]= c aren't yet supported in CTFE. It will work in a couple of compiler releases from now.Only D2, or D1 as well?Workaround: int[2] x; x[0]=i1_; x[1]=i2_; res.arr=x;:)
Feb 26 2010