Я обнаружил, что пересечение инициализации constexpr
переменных все еще считает ошибку времени компиляции при переходе через нее, в C ++ 11 (по крайней мере, в моей среде компиляции)
Рассмотрим следующий код:
t foo()
{
return 1;
}
int main()
{
int T = foo();
if (T == 0)
goto JumpLabel;
constexpr int lowBound = 3;
constexpr int upBound = 10;
if (T >= lowBound && T <= upBound)
return 1;
JumpLabel:
return 0;;
}
Оператор goto
вызывает ошибку времени компиляции в C ++ 11.Является ли эта ошибка разумной?Это просто крест constexpr
переменных, которые ничего не инициализируют!У меня есть только компилятор C ++ 11.Любой может сказать мне, это все еще ошибка в более высоком стандарте, например, C ++ 14, C ++ 17?
=== UPDATE ===
другая программа неиспользуя goto
с той же проблемой:
int bar()
{
return 3;
}
int foo()
{
return 1;
}
int main()
{
int T = foo();
int U = bar();
switch (T) {
case 0:
constexpr int lowBound = 3;
constexpr int upBound = 10;
if (U >= lowBound && U <= upBound)
return 1;
default:
T = -1;
}
return T;
}