Creo que el siguiente para ser una forma más barata de la unión variable local al cierre:La manera más barata de la unión variable local al cierre
void ByRValueReference(A&& a) {
}
std::function<void()> CreateClosureByRValueReference() {
A a;
std::function<void()> f = std::bind(&ByRValueReference, std::move(a)); // !!!
return f;
}
Sin embargo, no se compila bajo Clang 3.1:
error: no viable conversion from '__bind<void (*)(A &&), A>' to 'std::function<void()>'
y gcc 4.6.1:
/usr/include/c++/4.6/functional:1778:2: error: no match for call to ‘(std::_Bind<void (*(A))(A&&)>)()’
¿Estoy violando la norma o simplemente se han roto las bibliotecas estándar?
Creo que es 'function'. –
RedX
Lo que en realidad es un poco costoso aquí es 'std :: function'. Si realmente te importa la eficiencia, yo devolvería 'decltype (std :: bind (...))' – pmr