Рассмотрим следующую программу:Почему MSVS позволяет использовать NULL в качестве чистой спецификации виртуальной функции?
struct Test
{
virtual void foo()=NULL;
};
int main()
{ }
г ++ 4.8.1 дает ожидаемую ошибку следующим образом:
[Error] invalid pure specifier (only '= 0' is allowed) before ';' token
Clang дает следующее сообщение об ошибке:
error: initializer on function does not look like a pure-specifier
Но когда я попробовал его на МСВС 2010 он компилирует & работает отлично. Я думаю, что g ++ & clang прав в этом случае. Что говорит об этом стандарт? Я отключил расширения компилятора, используя параметр командной строки \ Za, но MSVS по-прежнему принимает этот код. Почему это не дает никаких ошибок?
Я также пробовал это на онлайн компиляторе VC++ here, который был последний раз обновлен 8 июля 2015 года. Неужели это ошибка в MSVS 2010 & 2015?
См. [Чистые виртуальные функции в C++ 11] (http://stackoverflow.com/q/20861346/1708801), это неверно, кажется ошибкой. –
@ShafikYaghmour: Итак, есть ли отчет об ошибке? – Destructor
@PravasiMeet Я бы предположил, что VS2010 только что определил 'NULL'' '0'. –