//******************************************************** // The following code example is taken from the book // C++17 - The Complete Guide // by Nicolai M. Josuttis (www.josuttis.com) // http://www.cppstd17.com // // The code is licensed under a // Creative Commons Attribution 4.0 International License // http://creativecommons.org/licenses/by/4.0/ //******************************************************** #include #include #include class Name { private: std::string first; std::optional middle; std::string last; public: Name (std::string f, std::optional m, std::string l) : first{std::move(f)}, middle{std::move(m)}, last{std::move(l)} { } friend std::ostream& operator << (std::ostream& strm, const Name& n) { strm << n.first << ' '; if (n.middle) { strm << *n.middle << ' '; } return strm << n.last; } }; int main() { Name n{"Jim", std::nullopt, "Knopf"}; std::cout << n << '\n'; Name m{"Donald", "Ervin", "Knuth"}; std::cout << m << '\n'; }