Этот код компилируется (Visual Studio 2013). Обратите внимание, что я передаю Set
, а не Set<T>
, в качестве параметра operator= в теле функции, которое находится за пределами определения класса. Но я не могу вернуть Set
или сделать его членом Set
; он должен возвращать Set<T>
и быть членом Set<T>
.
Где допустимо не указывать параметры шаблона? Внутри определения класса, а где еще?
Это изменение стандарта? Я пытаюсь сохранить совместимость со всеми существующими версиями, включая 98.
template <typename T>
class Set
{
public:
Set() {}
const Set& operator=(const Set& rhs);
//Shouldn't this have to be
//const Set<T>& operator= (const Set<T>& rhs); ?
};
template <typename T>
const Set<T>& Set<T>::operator= (const Set& rhs) //<-- HERE
{
Set temp; //<-- AND HERE
/* ... */
return *this;
}
int main()
{
Set<int> S, T;
T = S;
}
template <typename T> auto Set<T>::operator=(const Set&) -> const Set&
- person Piotr Skotnicki   schedule 15.04.2016void main
недействителен и помешал бы многим (большинству) читателей опробовать ваш код. Я исправил это. Пожалуйста, не публикуйте код сvoid main
, если только вопрос не касается конкретно этого, потому что это вводит в заблуждение читателей-новичков и делает невозможным просто скопировать и вставить ваш код, чтобы попробовать его, если только вы не используете один из немногих компиляторов, которые его принимают. . - person Cheers and hth. - Alf   schedule 15.04.2016