次のコードを検討してください。
#include <iostream>
#include <functional>
using namespace std;
template<class T>
void fun(T t)
{
t+=8;
}
int main()
{
int i = 0;
fun(ref(i));
cout << i << endl;
}
このコードは「8」を出力します。fun()のtは自動的にint&に変換されると思います。
しかし、に置き換えるt+=8
とt=8
、プログラムはコンパイルされません。
なんで?