Я заметил, что моя кодовая база больше не компилируется с g cc.
. Мне удалось уменьшить проблему до следующего
struct bar {
int foo(){return 0;}
};
int foobar() {
if constexpr(true) {
return 0;
} else {
return [](){
return bar{};
}().foo();
}
}
https://godbolt.org/z/ateuYW
<source>: In function 'int foobar()':
<source>:11:10: error: invalid use of 'void'
9 | return [](){
| ~~~~~
10 | return bar{};
| ~~~~~~~~~~~~~
11 | }().foo();
| ~^~
<source>:11:13: error: expected ';' before 'foo'
11 | }().foo();
| ^~~
| ;
<source>:11:13: error: 'foo' was not declared in this scope
11 | }().foo();
| ^~~
clang и msv c компилируют код без проблем.
Изменение true
в if constexpr
на false
, а также g cc будет скомпилируйте его.
Я предполагаю, что g cc не полностью разбирает ложную часть, которая приводит к странной ошибке.
Итак, мой вопрос:
- Действителен ли код c ++ или я что-то пропустил?
- Должен ли я сообщить об ошибке в g cc? (Я не смог найти отчет об ошибке для этой проблемы)