std::reference_wrapper
is a standard library that wraps a reference in a copyable, assignable object.
My view is that it has a weird design and seems like a hack to trick classes that store objects by value to believe that they are copying a value instead of storing a reference.
It also seems like a "tag" to pass by reference.
Without getting into any controversy about the semantics of the class:
What I find particularly puzzling is that it implements operator()(...)
(forwarding it to the internal reference).
Does anybody know why it implements such a member specifically? I mean, it could implement many other operator
s, like ==
, or []
, so why ()
only?
With that criterion, it should implement any common operator +
, ==
, <
, []
, swap
(not to mention, any arbitrary member like `.size(), if that were possible in the language).
A possibility that I imagine is that std::reference_wrapper
is many times used to store functions, but it seems just odd, and in that case reference_function
would have been a better name.