可変引数コンストラクターは、暗黙的に生成されたコンストラクター、つまりデフォルト コンストラクターとコピー コンストラクターを非表示にすることになっていますか?
struct Foo
{
template<typename... Args> Foo(Args&&... x)
{
std::cout << "inside the variadic constructor\n";
}
};
int main()
{
Foo a;
Foo b(a);
}
どういうわけか、この回答を読んだ後、これが何も出力しないことを期待していましたが、g ++ 4.5.0で2回出力inside the variadic constructor
されます:(この動作は正しいですか?
可変個引数テンプレートなしでも発生します。
struct Foo
{
Foo()
{
std::cout << "inside the nullary constructor\n";
}
template<typename A> Foo(A&& x)
{
std::cout << "inside the unary constructor\n";
}
};
int main()
{
Foo a;
Foo b(a);
}
ここでも、両方の行が印刷されます。