constructor de copia de plantilla de c ++ en la clase de plantilla
Tengo una clase de plantilla que tiene un constructor de copia de plantilla. El problema es que cuando instancia esta clase usando otra instancia de esta clase con el mismo tipo de plantilla, mi constructor de copia de plantilla no se llama. ¿Por qué no coincide? Aquí está el fragmento de código:
#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;
}
La salida es
default constructor
Pero si escribo explícitamente el constructor de copia predeterminado (al descomentarlo), la salida se convierte en
default constructor
copy constructor
Realmente no lo entiendo. Lo probé con mi compilador local (clang-500.2.79) y conéste (gcc 4.9.2) y obtuve el mismo resultado.