// GNU/Linux 64-bit
// DMD 2.063
This is as far as I could narrow it down.
------------8<------------8<------------
import std.stdio;
struct S(size_t M, size_t N) {
double[] _data = new double[M*N];
alias _data this;
this(double[M*N] data...) pure nothrow
{
_data[] = data[];
}
}
unittest {
auto m1 = S!(4,4)(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
auto m2 = S!(2,2)(1,1,1,1);
auto m3 = S!(2,3)(1,1,1,1,1,1);
auto m4 = S!(3,2)(1,1,1,1,1,1);
auto m6 = S!(3,3)(1,1,1,1,1,1,1,1,1);
auto m9 = S!(4,4)(4,0,0,0,0,0,2,0,0,1,2,0,1,0,0,1);
assert(S!(2,2)(1,1,1,1)._data == [1,1,1,1]);
writeln(m1);
}
void main() { }
------------>8------------>8------------
Expected:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1 ,1 ,1 ,1]
I get:
[4, 0, 0, 0, 0, 0, 2, 0, 0, 1, 2, 0, 1, 0, 0, 1]
Comment #1 by nilsbossung — 2013-06-20T07:39:13Z
Reduction shows that it's a duplicate of issue 2947:
struct S {
double[] _data = new double[1];
this(int ignored) {}
}
void main() {
assert(S()._data !is S()._data); // passes
assert(S(0)._data !is S(0)._data); // fails
assert((new S)._data !is (new S)._data); // fails
}
*** This issue has been marked as a duplicate of issue 2947 ***