LINUX.ORG.RU

C++ Poco::Util::Option вызов метода в одном операторе с конструктором

 , , , ,


0

3

Добрый день.
Посмотрел пример кода из документации Poco:

//https://pocoproject.org/docs/Poco.Util.Option.html
Option versionOpt("include", "I", "specify an include directory")
   .required(false)
   .repeatable(true)
   .argument("directory");
Как видно, метод вызывается сразу после конструктора в одном операторе.
Код не компилируется(g++-4.8, g++-4.9, g++5, c++11, версия Poco 1.7.7).
Поясните пожалуйста. Это ошибка в коде или есть стандарт, где это код валиден?
Update
если немного изменить код, то компилируется:
Option versionOpt = Option("include", "I", "specify an include directory")
   .required(false)
   .repeatable(true)
   .argument("directory");
Но это создание временного объекта. А вот все-таки что на счет первого кода?

★★★★★

Последнее исправление: rumgot (всего исправлений: 4)
Ответ на: комментарий от Bfgeshka

Виноват.
Test/main.cpp: In function ‘int main(int, char**)’:
Test/main.cpp:16:8: error: expected ‘,’ or ‘;’ before ‘.’ token
.required(false)

rumgot ★★★★★
() автор топика
Последнее исправление: rumgot (всего исправлений: 1)

А вот все-таки что на счет первого кода?

Может быть потому что в первом объявление коррелятор функцию усмотрел, а не объект.

Option versionOpt("include", "I", "specify an include directory");
versionOpt.required(false)
   .repeatable(true)
   .argument("directory");

так делай.

anonymous
()

где ж тут временный объект, васек? первое сахарная форма второго, потому и не конпеляетс, а второе это то во что первое и развернется (попробуй первое в скобки взять, убедись)

anonymous
()

баг в компиляторе

[stmt.ambig]

2 [ Note: If the statement cannot syntactically be a declaration, there is no ambiguity, so this rule does not apply. The whole statement might need to be examined to determine whether this is the case....

anonymous
()

Это ошибка в коде

Да. Нет такого синтаксиса объявлений. Там максимум инициализация (т.е. вызов конструктора).

xaizek ★★★★★
()
Ответ на: Нет такого синтаксиса объявлений от anonymous

Называется «declarator», поэтому и «объявление». Технически это ещё и определение, когда есть инициализатор или для переменных внутри блоков, но сути не меняет. По грамматике это init-declarator-list, там можно синтаксис посмотреть.

xaizek ★★★★★
()
Ответ на: комментарий от anonymous

Чому не так тогда?

Option versionOpt{"include", "I", "specify an include directory"}
   .required(false)
   .repeatable(true)
   .argument("directory");

BruteForce ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.