Какое предупреждение Clang эквивалентно константе Wzero-as-null-pointer из GCC?

В нашем проекте используется C++11/14, и мы хотим использовать nullptr вместо 0 или NULL с указателями, даже если разрешено 0 (как целочисленный литерал).

У меня есть следующий код:

int main()
{
    int *ptr1 = nullptr; // #1
    int *ptr2 = 0;       // #2
}

Если я скомпилирую с GCC (5.3.0) и флагом -Wzero-as-null-pointer-constant, он выдаст предупреждение в #2, но я не могу найти аналогичный флаг в Clang. Если я скомпилирую код с Clang (3.7.1) и флагом -Weverything, я не получу никакого предупреждения о #2.

Итак, есть ли способ получить подобное предупреждение об этом в Clang?


person Daniel    schedule 22.01.2016    source источник
comment
Это еще хуже. В С++ вам разрешено использовать любое целочисленное константное выражение, оценивающее ноль, а не только литерал... например. !!!!!1.   -  person 6502    schedule 22.01.2016
comment
@ 6502 Я думаю, что это было поведение в C++ 98, но C++ 14, похоже, изменил это. См. этот ответ. Если я правильно понимаю, !!!!!1 - это интегральное константное выражение (которое оценивается как false), а не целочисленный литерал.   -  person Daniel    schedule 22.01.2016
comment
Clang IIRC на самом деле поставляется с инструментом для автоматической замены старых констант нулевого указателя на nullptr.   -  person T.C.    schedule 22.01.2016


Ответы (2)


Clang не поддерживает такого рода предупреждения (т. е. в Clang нет эквивалента -Wzero-as-null-pointer-constant). Вы можете увидеть это сами, если добавите опцию -Weverything (не забудьте сделать это только для тестирования), которая включает все предупреждения Clang.

Текущая демонстрация

person 101010    schedule 22.01.2016
comment
Это уже не так. - person Alex Reynolds; 26.06.2018

clang имеет это предупреждение с версии 5.0; Я добавил его здесь http://llvm.org/viewvc/llvm-project?view=revision&revision=302247.

person thakis    schedule 05.05.2017