following code无法使用gcc编译:
struct test {
int x;
test() try : x{123} {
}
catch (...) {
}
};
int main() {}
错误:
prog.cpp:3:25: error: expected unqualified-id before ‘{’ token
test() try : x{123} {
^
prog.cpp:5:5: error: expected unqualified-id before ‘catch’
catch (...) {
^
prog.cpp: In constructor ‘test::test()’:
prog.cpp:3:23: error: expected ‘{’ at end of input
test() try : x{123} {
^
prog.cpp:3:23: error: expected ‘catch’ at end of input
prog.cpp:3:23: error: expected ‘(’ at end of input
prog.cpp:3:23: error: expected type-specifier at end of input
prog.cpp:3:23: error: expected ‘)’ at end of input
prog.cpp:3:23: error: expected ‘{’ at end of input
将x{123}
更改为x(123)
会有所帮助。这应该(不)以这种方式工作吗?
答案 0 :(得分:1)
这根据标准的语法有效(大括号见[gram.special],try
的[gram.except] - catch
。GCC 4.8有错,但是GCC 4.9正确处理它(正如已经报道的其他编译器一样)。
我不知道为什么BS在他的书中没有使用这种语法。也许是因为当他编写他的例子以确定它们是否正确时(如果他这样做的话)他没有任何支持这种语法的编译器?