Должна ли внедрена С++ стандартная библиотека на С++?

  • Должна ли внедрена реализация С++ стандартной библиотеки на С++?
  • Если нет, разрешено ли делать магические вещи, которые не выполняются в чистой С++ и стандартной библиотеке, и какое-то поведение, определенное определением реализации?

  • Я знаю, что существуют параллельные реализации, которые полагаются на расширения (по крайней мере, в pre С++ 11), но действительно ли они соответствуют?
  • Я не мог найти никаких требований в стандарте, но, может быть, мой стандарт-fu сегодня слаб.

Ответ 1

Нет.

Собственно, даже Стандарт даже предписывает, что #include <map> (например) может просто импортировать предварительно сохраненный АСТ и вообще не ссылаться на файл.

Ответ 2

Нет необходимости вообще в том, как реализуется стандартная библиотека С++ (или стандартная библиотека C). Все, что требуется библиотеке, - это реализовать документированный и указанный интерфейс. Как это делается, полностью зависит от реализации. Часть стандартных библиотек часто реализуется компилятором каким-то магическим способом, и в С++ 2011 существует несколько интерфейсов, которые на самом деле не могут быть реализованы с использованием стандартных языков С++ 2011! В первую очередь это верно для некоторых черт в <type_traits>, но есть и другие вещи.

Только для справки: как реализуется С++ и что на самом деле означает соответствие стандарту, считается крайне неопределенным. Соответствующее предложение - 1.4 [intro.compliance]. Он просто говорит о том, что выдается диагностика и что должна делать программа, однако ограничение ограничений ресурсов.

Ответ 3

Совсем нет, только интерфейс должен быть С++.