Почему эта шаблонная структура с C ++ 17 `constexpr if` не скомпилируется в MSVC? - PullRequest
3 голосов
/ 30 марта 2019

Этот код не компилируется в MSVC с ошибкой C2065 «тест»: необъявленный идентификатор ». Clang компилируется без предупреждений, GCC компилирует, но предупреждает с -Wall «warning: переменная 'test' установлена, но не используется [-Wunused-but-set-variable]". Сравнение доступно на Годболт .

template <typename T>
struct foo
{
    constexpr auto operator()() const
    {
        if constexpr (constexpr auto test = true; test)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
};

int main()
{
    foo<int> bar{};

    bar();

    return 0;
}

Есть несколько способов сделать этот компилятор

  1. Удалить шаблон вокруг foo
  2. Удалить constexpr
  3. Назначить test за пределами if constexpr
    constexpr auto test = true;
    if constexpr (test)
    

В чем причина этой ошибки компиляции?

1 Ответ

3 голосов
/ 30 марта 2019

Это просто ошибка для MSVC и GCC.

Уже есть отчет об ошибке для MSVC.

Для GCC это может быть связано с эта ошибка и исправлена ​​в магистрали GCC .

...