Рассмотрим эту программу:
#include <iostream>
int main()
{
delete std::cout;
}
AFAIK функция преобразования operator void * () const была удалена из С ++ 11. Таким образом, эта программа должна потерпеть неудачу при компиляции на компиляторе C ++ 11. Да, это правда, что оба g ++ 4.8.1 и 4.9.2 дают диагностику (в виде предупреждения о том, что удаление void * не определено, и это тоже хорошо). Но не должна ли эта программа терпеть неудачу при компиляции из-за удаления этой функции преобразования, из-за которой весь объект потока мог быть неявно преобразован в void * в C ++ 98 и C ++ 03 ?. Это ошибка? Кажется немного удивительным, что они до сих пор не реализовали это изменение.
Я пробовал эту программу в g ++ 4.9.2 (которая поддерживает C ++ 14), но она выдает предупреждение, а не ошибку компилятора. Компилятор Ideone выдает ошибку, как и ожидалось. (См. Живую демонстрацию здесь)