読者です 読者をやめる 読者になる 読者になる

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