нельзя использовать равномерную инициализацию в списке инициализации конструктора с помощью try / catch

следующий код не компилируется с 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) помогает. Это должно (не) работать таким образом?

11

Решение

Это верно в соответствии с грамматикой стандарта (см. [Gram.special] для фигурных скобок и [gram.except] для trycatch, GCC 4.8 ошибается, но GCC 4.9 обрабатывает его правильно (как и другие компиляторы, как уже сообщалось).

Я понятия не имею, почему Б.С. не использует этот синтаксис в своей книге. Может быть, потому что у него не было под рукой компилятора, который бы поддерживал этот синтаксис, когда он компилировал свои примеры, чтобы посмотреть, верны ли они (если он сделал)?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]