#include <iostream>
#include <cstdint>
using namespace std;
template<class T>
class integer_IO
{
T &val;
public:
integer_IO(T &arg) : val(arg) {}
friend istream &operator>> (istream &is, integer_IO<T> &i)
{
decltype(+(i.val)) hlp;
is >> hlp;
i.val = hlp;
return is;
}
friend ostream &operator<< (ostream &os, integer_IO<T> const &i)
{
os << +(i.val);
return os;
}
};
template<class T>
integer_IO<T> intIO(T &arg)
{
return integer_IO<T>(arg);
}
int main()
{
int_least8_t i;
cin >> intIO(i);
cout << intIO(i) << '\n';
}
Kod się nie kompiluje: http://ideone.com/15o5XZ
Nie jestem pewien, dlaczego. Czemu kompilator nie widzi odnośnego przeładowanego operatora i wyrzuca błędy?