У меня есть класс шаблона, у которого есть конструктор копии шаблона. Проблема в том, что когда я создаю экземпляр этого класса, используя другой экземпляр этого класса с тем же типом шаблона, конструктор экземпляра шаблона не вызывается. Почему это не соответствует? Вот фрагмент кода:C++ template copy constructor on template class
#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) и получил тот же результат.
Шаблон никогда не был (!) Конструктором копирования! –
Конструктор копирования никогда не является шаблоном. –
Существует неявно объявленный конструктор копирования, который является предпочтительным при разрешении перегрузки. –