Um construtor de modelo substitui o construtor de cópia implícito em C ++?

Um construtor de modelo (como o seguinte) substitui o construtor de cópia implícita?

template <class T>
struct Foo
{
    T data;

    // ...

    template <class U>
    Foo(const Foo<U> &other) : data((T)doSomethingWith(other.data)) {}

    // ...
};

Se sim, ainda o substitui seother é passado por valor em vez de referência constante?

Em caso afirmativo, há alguma maneira de contornar isso sem definir explicitamente um construtor de cópia?

questionAnswers(3)

yourAnswerToTheQuestion