С++ 14 включает стандартизированные литералы, среди прочего, std::string
и различные временные интервалы из заголовка <chrono>
.
Чтобы использовать их, вы должны сказать using namespace std::literals;
(или некоторые варианты в зависимости от того, какие именно литералы вы хотите, поскольку они находятся во множестве встроенных пространств имен).
Все это хорошо, но мне любопытно, почему требуется объявление using
. UDL без лидирующего подчеркивания зарезервированы для реализации, поэтому нет возможности, чтобы "hello world"s
мог когда-либо означать что-либо еще в стандартной программе.
Итак, почему нет #include <string>
, достаточного для того, чтобы привести литеральную функцию преобразования в область видимости? Почему я должен явно включать литеральное пространство имен?
EDIT: N3531 - это самая последняя версия предложения, которую я могу найти - к сожалению, она не обсуждает мотивацию для размещения вещей в пространстве имен, но только говорит:
Можно суммировать требования обсуждения [Портленд] следующим образом:
- используйте встроенное пространство имен для (группы связанных) операторов UDL