En el siguiente código, el constructor variadic se llama dos veces. ¿Cómo puedo hacer que se llame al constructor de copia en lugar de la versión de argumento único del constructor variadic cuando corresponda?¿Cómo puedo obtener el constructor de copia llamado sobre un constructor variadic?
#include <iostream>
struct Foo
{
Foo(const Foo &)
{
std::cout << "copy constructor\n";
}
template<typename... Args>
Foo(Args&&... args)
{
std::cout << "variadic constructor\n";
}
std::string message;
};
int main()
{
Foo f1;
Foo f2(f1); // this calls the variadic constructor, but I want the copy constructor.
}
Hay algo más, es decir, colapso de referencia (¿cómo se llamó?), Es decir 'T &&&' => 'T &' porque de lo contrario un lvalue ('f1') no podría enlazarse a' T && '. –