Да, реализация стандартной библиотеки, специально предназначенная для интерфейса на основе модулей, будет изолирована от пользовательских макросов и, следовательно, может использовать «нормальные» имена. Ну, может быть; Я расскажу об этой возможности в конце.
Несмотря на это, я не ожидал бы, что это произойдет в ближайшем будущем, даже после гипотетического C ++ 23 с библиотеками в модулях.
причина в том, что вам все еще нужно будет иметь возможность #include
стандартных заголовков, даже в модульном коде. Таким образом, эти заголовки должны быть по-прежнему доступны. И хотя компилятор может юридически преобразовать #include <vector>
непосредственно в import std.vector
(при условии, что оба определяют одно и то же), это может быть нарушением обратной совместимости для пользователей этой платформы, которые могут добавить несколько #define
до #include
. Если бы вы import std.vector
.
не ожидали аналогичных ожиданий, учитывая, что вам по-прежнему понадобятся стандартные заголовки библиотек, маловероятно, что любая реализация захочет поддерживать 2 копии стандартного библиотечного кода: один для заголовков и один для модулей. Должно быть проще определить модули стандартной библиотеки с помощью #include
соответствующих заголовков и export
указанных c символов из них.
Таким образом, базовый код будет по-прежнему записываться как заголовки и, следовательно, все равно должен будет Предположим, что пользователи могут иметь любой набор #define
с до #include
.
. Существует одна проблема, которая может сделать это невозможным. Модули по-прежнему должны иметь дело с внешними определениями, не из пользовательского кода до #include
, а из переключателей компилятора. Люди будут использовать такие переключатели для параметризации своих модулей, и это нормально. Однако такие переключатели находятся за пределами области стандарта, поэтому неясно, придется ли реализациям защищаться от них или нет.