Предполагается ли, что конструкторы Variadic скрывают неявно сгенерированные, т.е. конструктор по умолчанию и конструктор копирования?
struct Foo
{
template<typename... Args> Foo(Args&&... x)
{
std::cout << "inside the variadic constructor\n";
}
};
int main()
{
Foo a;
Foo b(a);
}
Как-то я ожидал, что это ничего не опубликует после чтения этого ответа, но он печатает inside the variadic constructor
дважды в g++ 4.5.0:( Правильно ли это поведение?
Это также происходит без вариационных шаблонов:
struct Foo
{
Foo()
{
std::cout << "inside the nullary constructor\n";
}
template<typename A> Foo(A&& x)
{
std::cout << "inside the unary constructor\n";
}
};
int main()
{
Foo a;
Foo b(a);
}
Снова распечатываются обе строки.