LINUX.ORG.RU

Constexpr if и числа в Clang

 , ,


0

2

Есть такой код:

int main()
{
  constexpr int flags = 2;
  
  if constexpr (flags & 3) {
    return 0;
  }
  
  return 1;
}
GCC спокойно проглатывает и работает. Clang же противится:
prog.cc:5:17: error: constexpr if condition evaluates to 2, which cannot be narrowed to type 'bool' [-Wc++11-narrowing]
  if constexpr (flags & 3) {
                ^
https://wandbox.org/permlink/P4JWOgkWj8veamrf

Причем без -Werror. Если подать -Wno-c++11-narrowing то тоже работает (как надо).

Кто прав? Баг ли?

P.S. Наиболее похожее что удалось нагуглить вот: https://stackoverflow.com/questions/41253121/strange-behavior-of-narrowing-in...

★★★★★

Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от missxu

если сделать max(0.00001,lowp float) то 0.00001 станет lowp тоесть 0
если max(0.00001,highp float) то 0.00001 останется таким

А для случаев

max(lowp float, 0.00001)
max(highp float, 0.00001)

Что будет?

очевидно помоему нет,в 2018 то?

Зависит от определения сабжевой функции, а std::max еще с мохнатых веков.

(интересно будет ловить такую ошибку используя auto в C++ да?)

Кстати, забавно, если определить тип аргументов как auto (тем самым убрав зависимость между типами), то будет работать как ты хочешь:

constexpr auto max = [](auto a, auto b) constexpr { return a < b ? b : a; };

https://wandbox.org/permlink/5y6lpoeFNuEc6T2y

KennyMinigun ★★★★★
() автор топика
Последнее исправление: KennyMinigun (всего исправлений: 2)
Ответ на: комментарий от KennyMinigun

Что будет?

ес че там «не честный» компилятор, он наполовину на шаблонах наполовину интерпретирует и наполовину компилирует

glsl компилятор скорее можно считать как «препроцессор», конвертирующий glsl код в «ассемблер для видеокарт»(который уже драйвер компилирует делая уникальный код для каждой карты)

сравнение с С++ офк не корректное, никто не мешает иметь такойже препроцессор конвертирующий мой «диалект Си» на то что хочет clang/gcc

просто раз уже вводите auto каллбеки и смартптр, то и тут давайте делайте по умолчанию конвертацию

в этом мой посыл был

missxu
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.