template <typename Type> class Foo { Foo& Bar() { return *this; } };
Почему это компилируется?Разве мне не нужно указывать параметр шаблона в типе возвращаемого значения?
Foo<Type>& Bar() { return *this; }
Foo<Type> подразумевается, потому что определение Bar находится в пределах определения класса.Если бы это было вне определения класса, то вы должны были бы определить его явно:
Foo<Type>
Bar
template <typename Type> Foo<Type>& Foo<Type>::Bar() { return *this; }