Приведенный ниже код ведет себя неправильно.
Когда вызывается f или f, он печатается так, как будто k = true, но оператор if ведет себя так, как если бы k = false. При вызове f происходит обратное.
Ошибка не проявляется без шаблонов, constexpr или отрицателя(!). Его можно удалить, создав отдельную переменную (см. ниже). Я предполагаю, что это как-то связано с тем, как MSVC обращается с шаблонами?
#include
const bool k = false;
template
void f()
{
printf("%d %d\n", k, n); //prints 1 0 or 1 5 when calling f or f, respectively
//kop = !k
if constexpr(!k)//if constexpr(kop) works fine
{
//doesn't enter the conditional when calling f
int f = 9;
printf("%d %d\n", f, n);
}
}
int main()
{
f();
f();
f();
f();
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... es-in-msvc