В стандарте С++ (например, N4594) существуют два определения для operator""s
:
namespace std {
...
inline namespace literals {
inline namespace chrono_literals {
// 20.15.5.8, suffixes for duration literals
constexpr chrono::seconds operator"" (unsiged long long);
и string
, конечно:
namespace std {
....
inline namespace literals {
inline namespace string_literals {
// 21.3.5, suffix for basic_string literals:
string operator "" s(const char* str, size_t len);
Интересно, что получается из этих пространств имен (и всех других пространств имен внутри std::literals
), если они inline
.
Я думал, что они находятся внутри отдельных пространств имен, поэтому они не конфликтуют друг с другом. Но когда они inline
, эта мотивация отменена, правильно? Edit: Потому что объясняет Bjarne, главной мотивацией является "управление версиями библиотеки", но это не подходит здесь.
Я вижу, что перегрузки для "Секунды" и "Строка" различны, и поэтому они не конфликтуют. Но будут ли они противоречить, если перегрузки были одинаковыми? Или принимает (inline
?) namespace
так или иначе предотвращает?
Следовательно, что получается от них вообще в inline namespace
?
Как, как указывает @Columbo ниже, перегружаются через встроенные пространства имен, и они сталкиваются?