c++ - Why is operator""s hidden in a namespace? -


in order use operator""s std::string have using namespace std::string_literals. user-defined literals don't begin _ reserved, possible conflict can't excuse. other operator""s std::chrono that's int literals, there's no conflict there either.

what's reason this?

there 2 reasons why literals put namespaces:

  1. it considered undesirable users use using namespace std; hold of corresponding literals. having literals declared in namespaces specific these doesn't cause problem.
  2. depending on domain may desirable use s suffix else. there suffix s mean seconds don't conflict.

in video of stl's cppcon 2014 talk (posted remyable in comment) stephan t. lavavej explains overall design of literals in c++14 , pretty clear not supposed in global namespace! instead, literal suffixes in standard library live in hierarchy of inline namespaces giving users fine-grained control on literals being made available. example, literal suffix strings declared (21.3 [string.classes] paragraph 1):

namespace std {     inline namespace literals {         inline namespace string_literals {             string operator"" s(char const* str, size_t len);         }     } } 

this hierarchy of inline namespaces makes possible users appropriate choice of literal suffixes:

  • using namespace std; - in standard c++ library, including literal suffixes, without qualification.
  • using namespace std::literals; - literal suffixes defined in standard c++ library.
  • using namespace std::string_literals; - literal suffixes applicable strings.
  • using namespace std::literals::string_literals; - yes, can shouldn't: that's equivalent using namespace std::string_literals;.

clearly, committee wouldn't have gone effort if had considered idea viable pollute global namespace literal suffixes, although can't conflict user literal suffixes.


Comments

Popular posts from this blog

html - Styling progress bar with inline style -

java - Oracle Sql developer error: could not install some modules -

How to use autoclose brackets in Jupyter notebook? -