Для языка, такого как С++, существование стандарта является обязательным. И хорошие компиляторы стараются изо всех сил (ну, по крайней мере, большинство хороших компиляторов). Многие компиляторы имеют языковые расширения, некоторые из которых разрешены стандартом, некоторые из которых не являются. Из последнего вида 2 примера:
-
gcc typeof
-
microsoft-компиляторы разрешают чистому объявлению виртуальной функции иметь как чисто-спецификатор (= 0), так и определение (которое запрещено стандартом - не обсуждать почему, этот другой вопрос:)
(есть много других примеров)
Оба примера полезны в следующем смысле: example1 - очень полезная функция, которая будет доступна в С++ 0x под другим именем. example2 также полезен, и Microsoft решила не соблюдать запрет, который не имеет никакого смысла.
И я благодарен, что компиляторы предоставляют языковые расширения, которые помогают нам разработчикам в нашей рутине. Но здесь возникает вопрос: не должен ли быть вариант, который, когда он установлен, требует, чтобы компилятор соответствовал стандарту, независимо от того, согласны ли они со стандартом или нет. Например, визуальная студия имеет такой вариант, который называется отключением языковых расширений. Но эй, они все еще позволяют example2.
Я хочу, чтобы все правильно поняли мой вопрос. Это БОЛЬШАЯ вещь, которую MSVC допускает example2, и мне очень хотелось бы, чтобы эта функция была в стандарте. Он не нарушает совместимый код, он ничего не делает. Это просто не стандарт.
Вы хотите, чтобы этот файл отключил Microsoft2 при отключении языковых расширений в значение true? Обратите внимание, что слова microsoft, example2 и т.д. Являются заполнителями:) Почему?
Опять же, просто чтобы убедиться. Ключевым моментом является: если компилятор потрудится предоставить совместимую версию (опционально заданную в настройках) (в ее пределах, например, я не говорю об экспорте) для определенной функции, когда они предоставляют лучшую альтернативу, которая не является стандартной и является возможно, даже надмножество стандарта, тем самым не нарушая ничего.