c ++ - Kopierkonstruktor für Vorlagenklasse

Ich habe eine Vorlagenklasse mit einem Vorlagenkopiekonstruktor. Wenn ich diese Klasse mit einer anderen Instanz dieser Klasse mit demselben Vorlagentyp instanziiere, wird mein Vorlagenkopiekonstruktor nicht aufgerufen. Warum passt es nicht zusammen? Hier ist das Code-Snippet:

#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;
}

Die Ausgabe ist

default constructor

Aber wenn ich den Standard-Kopierkonstruktor explizit schreibe (indem ich ihn auskommentiere), wird die Ausgabe zu

default constructor
copy constructor

Ich verstehe es wirklich nicht. Ich habe es mit meinem lokalen Compiler (clang-500.2.79) und mit @ getestdiese (gcc 4.9.2) und bekam das gleiche Ergebnis.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage