Как получить конструктор копирования, вызываемый поверх конструктора с переменным числом аргументов?

В следующем коде конструктор с переменным числом аргументов вызывается дважды. вызывается вместо версии с одним аргументом конструктора с переменным числом аргументов, когда это уместно?

#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.
}
11
задан James McNellis 21 June 2012 в 21:55
поделиться