默认模板参数的模板推导

时间:2018-05-11 13:40:39

标签: c++ c++17

我有一个类似于此的类:

template <class T = char>
struct C {
    T value;
};

直到C ++ 14,当我想使用默认模板参数时,我总是必须指定空尖括号:

void f() {
    C<> c;
    c.value = 'x';
}

由于C ++ 17支持类模板参数推导和显式推导指南,我想知道现在是否有办法让上面的代码工作而不指定空的尖括号:

void f() {
    C c;
    c.value = 'x';
}

如果我使用-std=gnu++17编译它,那么此代码在GCC 8.0中有效。但是,它仍然在Clang 6.0和Visual Studio 15.7中显示错误。哪种编译器在这种情况下是正确的?

我也试过像这样指定演绎指南:

C() -> C<char>;

这也没有帮助。这是正确的语法还是甚至有一种方法来为默认构造函数指定演绎指南?

0 个答案:

没有答案