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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta