类模板参数推导成员变量

时间:2018-12-05 17:58:30

标签: c++ c++17

在C ++ 17中,由于类模板参数的推导,我可以在以下示例中使用Foo,而无需使用空模板参数括号:

template<typename T = int>
struct Foo{};

int main(){
    Foo f;    // before C++17 you had to write "Foo<> f;"
}

为什么不允许类成员使用相同的语法?

template<typename T = int>
struct Foo{};

struct Foo2{
    Foo f{};  ///< error: invalid use of template-name 'Foo' without an argument list
};

int main(){
    Foo2 f2;
}

1 个答案:

答案 0 :(得分:5)

  1. IIRC没有人提议。
  2. 大概出于同样的原因,我们不从默认成员初始化程序中推断出任何东西:它们并不总是使用-构造函数可以通过显式指定其他初始化程序来覆盖它们。