В GCC есть инфраструктура для выдачи именно такого рода предупреждения:
void foo(const char* cstr) __attribute__((nonnull (1)));
void bar() {
foo(0);
}
при компиляции с -Wnonnull
(что подразумевается под -Wall
) дает:
warning: null argument where non-null required (argument 1)
Таким образом, в принципе, вы должны иметь возможность изменить соответствующий системный заголовок (или, что лучше для экспериментов, изменить собственную копию $ HOME / bits / basic_string.h, а затем переопределить системный с помощью -isystem $HOME
) аналогично: 1010 *
basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
__attribute__((nonnull (1)));
Однако это не помогает, потому что (по крайней мере, в 4.0.1) -Wnonnull
не поддерживается в C ++, и атрибут, очевидно, игнорируется. Непонятно, почему это так; возможно, чувствовалось, что он плохо взаимодействовал с перегрузкой или чем-то еще.