template<typename T> FowardIt& operator<<(const T&t)
//^^^^^ put const here
Сделайте ссылку на параметр const
, как показано выше.Потому что временные ссылки не могут быть связаны с неконстантной ссылкой.Вам не нужно определять другую функцию.Просто сделайте параметр const
, проблема будет решена.
Было бы также лучше, если бы вы также создали шаблон функции const
, поместив const
в крайнюю правую часть функции следующим образом:
template<typename T>
const FowardIt& operator<<(const T&t) const
^^^^^ ^^^^^ ^^^^^
| | |
| | put const here as well
| put const here
|
You've to make the return-type also const
since it can't return non-const reference anymore
Если вы сделаете это, то можете вызвать эту функцию и для const
объектов:
void f(const FowardIt &o)//note: inside the function, o is an const object!
{
o << 1;
o << SomeUserStruct();
}