Стандарт С++ допускает неявное преобразование нулевой целочисленной константы в указатель любого типа.
Следующий код недопустим, поскольку значение v
здесь не является константой:
float* foo()
{
int v = 0;
return v; // Error
}
Но следующий код верен:
float* foo()
{
const int v = 0;
return v; // Ok in C++98 mode, error in C++11 mode
}
Вопрос: почему gcc
и clang
(попробовал разные версии) правильно скомпилировали код в режиме С++ 98/03, но возвращают предупреждение/ошибку при компиляции в С++ Режим 11/14 (-std=c++11
)? Я попытался найти изменения в рабочем документе PDF С++ 11, но не добился успеха.
Компиляторы Intel compiler 16.0 и VS2015 не показывают ошибок и предупреждений в обоих случаях.