W poniższym kodzie konstruktor variadic jest wywoływany dwa razy. Jak mogę uzyskać wywołanie konstruktora kopiowania zamiast wersji argumentów konstruktora variadic, gdy jest to właściwe?Jak uzyskać wywołanie konstruktora kopiowania za pomocą konstruktora 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.
}
Jest trochę więcej do niego, a mianowicie zwijanie referencji (jak to się nazywa?), Tj. 'T &&&' => 'T &', ponieważ w przeciwnym razie wartość l ("f1") nie mogłaby się połączyć z 'T &&'. –