【发布时间】:2017-11-20 18:02:38
【问题描述】:
C++17 引入template argument deduction。
使用 gcc-7.2,我可以在函数中轻松使用它:
int test() {
std::pair d(0, 0.0);
}
我希望在类非静态数据成员中使用相同的语法,例如:
class Test {
std::pair d_{0, 0.0};
};
但这会导致 gcc error: invalid use of template-name ... without an argument list,--std=c++17 通过。
我尝试了一些其他的组合,但似乎都不起作用。
这是标准的预期行为,还是编译器不完全支持的情况?我在标准中找不到对类数据成员的任何明确引用。
我的用例当然要复杂得多,使用这种语法会非常方便(想想函数被传递和存储)。
【问题讨论】:
-
我不确定你到底在问什么。标准可以要求行为,委员会可以有意行为。您是指:1) 标准要求的行为,还是指 2) C++ 委员会预期的行为?
-
@JohannesSchaub-litb 这个问题很清楚,询问它是按照标准还是编译器错误的正确行为。
-
可能的解决方法:
decltype(std::pair{0, 0.0}) d_{0, 0.0};