Странное поведение с if constexpr и шаблонами в MSVCC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Странное поведение с if constexpr и шаблонами в MSVC

Сообщение Anonymous »

Приведенный ниже код ведет себя неправильно.
Когда вызывается 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»