Ho una classe template che ha un costruttore di copia template. Il problema è quando istanzio questa classe usando un'altra istanza di questa classe con lo stesso tipo di template, il mio costruttore di copia template non viene chiamato. Perché non corrisponde? Ecco il frammento di codice:Costruttore di copia modello C++ su modello classe
#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;
}
L'uscita è
default constructor
Ma se scrivo esplicitamente il costruttore di copia di default (decommentando esso), allora l'uscita diventa
default constructor
copy constructor
Io davvero non capisco. L'ho provato con il mio compilatore locale (clang-500.2.79) e con this one (gcc 4.9.2) e ho ottenuto lo stesso risultato.
Un modello non è mai (!) Un costruttore di copia! –
Un costruttore di copia non è mai un modello. –
Esiste un costruttore di copie dichiarato implicitamente che è preferito dalla risoluzione di sovraccarico. –