On Saturday, 22 November 2014 at 17:06:29 UTC, anonymous wrote:
On Saturday, 22 November 2014 at 15:00:00 UTC, Eric wrote:
Yes, but if I don't declare the class T as immutable, I don't
think this constraint will work.
You're mistaken. It works just fine.
class X /* not immutable */
{
private int x;
this(int x) pure { this.x = x; }
}
template foo(T : immutable Object)
{
void foo(T thing) {}
}
void main()
{
foo(new immutable X(5));
}
Yes, but this is what I really want:
class X(T : immutable Object)
{
private T x;
this(T x) pure { this.x = x; }
}
class Y
{
private int x;
this(int x) pure { this.x = x; }
}
void main()
{
immutable(Y) y = new immutable Y(5);
X!(Y) x = new X!(Y)(y);
}
// test.d(16): Error: template instance X!(Y) does not
// match template declaration X(T : immutable(Object))