Кто-нибудь знает, почему аргументы шаблона необходимы для возвращаемых типов, а не для типов аргументов при определении методов-шаблонов? Пример:
template<typename T>
struct Car {
Car drive(Car); // will be defined after the template declaration.
};
// Attempt #1: does not compile.
// Error: use of class template Car requires template arguments
template<typename T>
inline Car Car<T>::drive(Car) {}
// Attempt #2: compiles!
// The only difference is the use of template argument in return type.
// However, note that the argument to func does not require template argument!
template<typename T>
inline Car<T> Car<T>::drive(Car) {}
Не уверен, почему аргумент шаблона необходим для возвращаемого типа, но не требуется для типа аргумента. Когда Попытка №1 потерпела неудачу, я ожидал, что Попытка №2 тоже потерпит неудачу, и ожидал, что мне понадобится:
template<typename T>
inline Car<T> Car<T>::drive(Car<T>) {} // but no need to go this far.
, но Попытка №2 сработала!
Есть ли веская причина для такого поведения?