Nel seguente codice, il costruttore variadic viene chiamato due volte. Come posso richiamare il costruttore della copia anziché la versione a singolo argomento del costruttore variadic quando appropriato?Come posso richiamare il costruttore della copia su un costruttore 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.
}
C'è un po 'di più ad esso, vale a dire il collasso di riferimento (come si chiamava?), Cioè "T &&&' => 'T &' perché altrimenti un lvalue ('f1') non poteva legarsi a' T &&'. –