Quick A: Yes, std::ref
can be reassigned (see example)
Recently on SO:
Is this std::ref behaviour logical?
A small modification to
f2
provides the clue:template<class T> void f2(T arg) { arg.get() = xx; }This now does what you expect.
This has happened because
std::ref
returns astd::reference_wrapper<>
object. The assignment operator of which rebinds the wrapper. (see http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper/operator%3D)It does not make an assignment to the wrapped reference.
In the
f1
case, all is working as you expected because astd::reference_wrapper<T>
provides a conversion operator toT&
, which will bind to the implicit right hand side of ints implicitoperator+
.
Add a Comment
Comments are closed.