como o construtor std :: thread detecta a referência rvalue?
Obviamente, é possível passar uma referência rvalue parastd::thread
construtor. Meu problema é com a definição desse construtor emcppreference. Diz que este construtor:
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
Cria o novo objeto std :: thread e o associa a um thread de execução. Primeiro, o construtor copia / move todos os argumentos (o objeto de função f e todos os argumentos ...) para o armazenamento acessível por thread, como se fosse a função:
template <class T>
typename decay<T>::type decay_copy(T&& v) {
return std::forward<T>(v);
}
Tanto quanto eu posso verificar:
std::is_same<int, std::decay<int&&>::type>::value
retorna verdadeiro. Isso significastd::decay<T>::type
eliminará parte da referência rvalue do argumento. Então comostd::thread
O construtor sabe que argumento é passado por referências lvalue ou rvalue? Porque todosT&
eT&&
será convertido paraT
porstd::decay<T>::type