Код: Выделить всё
#include
struct S {
void operator()() { i++; }
int i = 0;
};
int main() {
S s;
const std::reference_wrapper r = s;
// now s.i == 0
r();
// now s.i == 1
S* const p = &s;
// now s.i == 1
(*p)();
// now s.i == 2
}
Код: Выделить всё
r
Функция стандартной библиотеки C++ не должна прямо или косвенно изменять объекты ([intro.multithread]), доступные потокам, отличным от текущего потока, если только к объектам не осуществляется прямой или косвенный доступ через неконстантные аргументы функции. , включая это.
Нарушает ли std::reference_wrapper это правило?
Подробнее здесь: https://stackoverflow.com/questions/785 ... ce-wrapper