On Sunday, 11 December 2011 at 04:27:31 UTC, Mehrdad wrote:
Another bug, this time regarding invariant()....
(I think this is related to the previous one about int vs.
size_t in template parameters, but I'm not sure...)
template NArray(T, size_t N)
{ static if (N > 0) { alias NArray!(T, N - 1)[] NArray; }
else { alias T NArray; } }
struct Tensor(T, Length...)
{
enum N = Length[0];
invariant() { }
this(scope NArray!(T, N) copyOfItems...) { }
@property T[] data() { return null; }
Tensor!(typeof(mixin("data[0] " ~ op ~ " data[0]")), N)
opBinary(string op)(Tensor other)
{ return typeof(return).init; }
}
void main()
{
Tensor!(size_t, 1) a;
a = a + a;
}
Error: this for __invariant needs to be type Tensor not type
Tensor!(uint,1)
This one is still valid.