The following code example is taken from the book
C++17 - The Complete Guide
by Nicolai M. Josuttis,
Leanpub, 2017
The code is licensed under a
Creative Commons Attribution 4.0 International License.
// raw code
#include <string>
#include <optional>
#include <iostream>
class Name
{
private:
std::string first;
std::optional<std::string> middle;
std::string last;
public:
Name (std::string f,
std::optional<std::string> 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';
}