不能使用try / catch在构造函数初始化列表中使用统一初始化

时间:2013-09-07 17:16:40

标签: c++ gcc c++11 g++ uniform-initialization

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)会有所帮助。这应该(不)以这种方式工作吗?

1 个答案:

答案 0 :(得分:1)

这根据标准的语法有效(大括号见[gram.special],try的[gram.except] - catch。GCC 4.8有错,但是GCC 4.9正确处理它(正如已经报道的其他编译器一样)。

我不知道为什么BS在他的书中没有使用这种语法。也许是因为当他编写他的例子以确定它们是否正确时(如果他这样做的话)他没有任何支持这种语法的编译器?