Этот код не компилируется в 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;
}
Есть несколько способов сделать этот компилятор
- Удалить шаблон вокруг
foo
- Удалить
constexpr
- Назначить
test
за пределами if constexpr
constexpr auto test = true;
if constexpr (test)
В чем причина этой ошибки компиляции?