Здравствуйте, jazzer, Вы писали:
Кстати, к вопросу о сабже — этот конструктор не является конструктором копирования, если для этого класса компилятор способен сгенерить такой конструктор (а судя по описанию, он способен это сделать).
т.е. когда компилятор сгенерит копиктор, в классе получится вот что:
template <class U> FTypeName(const U& val); // шаблонный
FTypeName(const FTypeName& val); // сгенерен компилятором, не шаблонный!
Тогда при копировании получится U = FTypeName, т.е. полное совпадение сигнатуры, при которой выигрывает нешаблонная функция.
Т.е. если это было попыткой убить одним выстрелом двух зайцев (конструктор из другого типа и копиктор), то это не сработает, будет вызвано то, что молча сгенерил компилятор.