Я работаю над шаблоном класса variadic, но я не могу использовать его с новым выражением без указания аргументов шаблона (я не хочу).Я свел проблему к следующему примеру кода:
template <typename T>
struct Foo
{
Foo(T p)
: m(p)
{}
T m;
};
template <typename T1, typename T2>
struct Bar
{
Bar(T1 p1, T2 p2)
: m1(p1), m2(p2)
{}
T1 m1;
T2 m2;
};
int main()
{
double p = 0.;
auto stackFoo = Foo(p); // OK
auto heapFoo = new Foo(p); // OK
auto stackBar = Bar(p, p); // OK
auto heapBar = new Bar(p, p); // error: class template argument deduction failed
return 0;
}
Из того, что я понимаю из cppreference , компилятор должен иметь возможность выводить аргументы шаблона в каждом вышеописанном случае.Я не могу понять, почему нет ошибки с heapFoo
тоже.
Итак, я что-то здесь упускаю?
Я использую gcc 7.2.0 на Xubuntu 17.10 с флагом -std = c ++ 17.