テンプレートコピーコンストラクタを持つテンプレートクラスがあります。問題は、このクラスを同じテンプレートタイプの別のインスタンスを使用してインスタンス化するときです。テンプレートコピーコンストラクタは呼び出されません。なぜそれは一致しないのですか?ここ は、コードスニペットです:テンプレートクラスのC++テンプレートコピーコンストラクタ
#include <iostream>
template <typename T>
class MyTemplateClass
{
public:
MyTemplateClass()
{
std::cout << "default constructor" << std::endl;
}
/*
MyTemplateClass(const MyTemplateClass<T>& other)
{
std::cout << "copy constructor" << std::endl;
}
*/
template <typename U>
MyTemplateClass(const MyTemplateClass<U>& other)
{
std::cout << "template copy constructor" << std::endl;
}
};
int main()
{
MyTemplateClass<int> instance;
MyTemplateClass<int> instance2(instance);
return EXIT_SUCCESS;
}
出力は
default constructor
あるしかし、私は明示的に(それをコメント解除することによって)デフォルトのコピーコンストラクタを書いた場合、出力は
default constructor
copy constructor
なり私は本当にそれを取得していません。私はローカルコンパイラ(clang-500.2.79)とthis one(gcc 4.9.2)でテストして同じ結果を得ました。
テンプレートは決してコピーコンストラクタではありません! –
コピーコンストラクタは決してテンプレートではありません。 –
オーバーロード解決が推奨する暗黙的に宣言されたコピーコンストラクタがあります。 –