В следующем коде вариационный конструктор вызывается дважды. Как я могу получить вызов конструктора копии вместо единственной версии аргумента вариационного конструктора, когда это необходимо?Как получить конструктор копирования, вызванный над конструктором 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.
}
Существует немного больше, а именно ссылка сбрасывается (как это называется?), Т. Е. 'T &&&' => 'T &, потому что иначе lvalue (' f1') не может связываться с 'T &&'. –