Проблема в том, что требования оператора постинкремента для целочисленных типов и для пользовательских типов различаются.В частности, определенный пользователем постинкрементный оператор, реализованный как функция-член, позволяет использовать значения r.
Если вы реализовали оператор как свободную функцию:
MyInt operator++(MyInt [const][&] x, int)
Тогда требования этого конкретногооператор будет извлечен из фактической подписи.Если первый аргумент принимается значением, то он принимает rvalues напрямую, если он принимает аргумент const &
, тогда он принимает rvalues, если конструктор копирования доступен, если аргумент принимается не константным &
, тогда этот оператор будеттребовать lvalues.