Eyes, JAPAN Blog > Template Mixinでオーバーロード出来ない

Template Mixinでオーバーロード出来ない

mima

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

以下のようなD言語のコードがうまく動きません。

mixin template T()
{
	void g(int x){}
	
	void h(){}
	void h(int x){}
}

struct S
{
	mixin T;
	
	void f(){}
	void f(int x){}
	
	void g(){}
}

void main()
{
	import std.stdio;
	
	__traits(getOverloads, S, "f").stringof.writeln();
	__traits(getOverloads, S, "g").stringof.writeln();
	__traits(getOverloads, S, "h").stringof.writeln();
}

結果は以下の通りになります。

tuple(f, f)
tuple(g)
tuple(h, h)

どうやら、ミックスイン元とミックスイン先で関数をオーバーロードしようとすると、うまく行かないみたいです。
このバグ(もしかすると仕様?)のせいで、かなりTemplate Mixinが使いづらくなってしまいます。

担当:美馬(バグだといいのですが・・・)

Comments are closed.