если constexpr g cc ошибка - PullRequest
3 голосов
/ 25 января 2020

Я заметил, что моя кодовая база больше не компилируется с 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 не полностью разбирает ложную часть, которая приводит к странной ошибке.

Итак, мой вопрос:

  1. Действителен ли код c ++ или я что-то пропустил?
  2. Должен ли я сообщить об ошибке в g cc? (Я не смог найти отчет об ошибке для этой проблемы)
...