std::reference_wrapper の参照元に T 型の値を代入する
std::reference_wrapper<T>
は std::ref()
等で返ってくるクラスなんですが、参照元に T 型の値を代入するときにちょっと気になったので覚書。
さて、次のように std::reference_wrapper<int>
で保持している参照元に対して整数を代入する場合、コンパイルエラーになります。
int a = 0; std::reference_wrapper<int> f = std::ref(a); f = 42; // エラー
こういう風に参照元に対して代入を行ないたい場合は get()
を介して行う必要があります。
int a = 0; std::reference_wrapper<int> f = std::ref(a); f.get() = 42; // OK
[コード]
#include <functional> #include <iostream> int main(){ int a = 0; std::reference_wrapper<int> f = std::ref(a); f.get() = 42; std::cout << a << std::endl; return 0; }
[出力結果]
42