...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

構造体クイズ

shared_ptrを作ってみようと頑張っていたのですが・・・.

import std.stdio;
struct X
{
	this(int i){writeln("X.this(int)");}
	this(this){writeln("X.postblit");}
	static X opCall(X){writeln("X.opCall(X)");X x;return x;}
	static X opCall(Y){writeln("X.opCall(Y)");X x;return x;}
	static X opCall(int){writeln("X.opCall(int)");X x;return x;}
	static X opCall(){writeln("X.opCall()");X x;return x;}
	ref X opAssign(X){writeln("X.opAssign(X)");return this;}
	ref X opAssign(Y){writeln("X.opAssign(Y)");return this;}
	~this(){writeln("X.~this");}
}
struct Y
{
	this(int i){writeln("Y.this(int)");}
	this(this){writeln("Y.postblit");}
	static Y opCall(Y){writeln("Y.opCall(Y)");Y y;return y;}
	static Y opCall(X){writeln("Y.opCall(X)");Y y;return y;}
	static Y opCall(int){writeln("Y.opCall(int)");Y y;return y;}
	static Y opCall(){writeln("Y.opCall()");Y y;return y;}
	ref Y opAssign(Y){writeln("Y.opAssign(Y)");return this;}
	ref Y opAssign(X){writeln("Y.opAssign(X)");return this;}
	~this(){writeln("Y.~this");}
}

void main()
{
	{
		writeln("-1-");
		Y a;
	}{
		writeln("\n-2-");
		Y a = Y();
	}{
		writeln("\n-3-");
		Y a = Y(1);
	}{
		writeln("\n-4-");
		Y a, b; a = b;
	}{
		writeln("\n-5-");
		Y a = X();
	}{
		writeln("\n-6-");
		Y a = X(1);
	}{
		writeln("\n-7-");
		Y a; a = X(1);
	}
}
-1-
Y.~this

-2-
Y.opCall()
Y.postblit
Y.~this
Y.~this

-3-
Y.this(int)
Y.~this

-4-
Y.postblit
Y.opAssign(Y)
Y.~this
Y.~this
Y.~this

-5-
X.opCall()
X.postblit
X.~this
Y.opCall(X)
Y.postblit
Y.~this
X.~this
Y.~this

-6-
X.this(int)
Y.opCall(X)
Y.postblit
Y.~this
X.~this
Y.~this

-7-
X.this(int)
Y.opAssign(X)
X.~this
Y.~this

カオス・・・.
さらにtemplateになったらわけわかりません.

あと

opDotとalias thisがあった・・・.