Boost.Flyweight

boost::flyweight를 이용하면, flyweigth 패턴을 수작업으로 구현할 필요 없이 사용할 수 있다.
struct User2{
flyweight<string> first_name, last_name;
User2(const string& first_name, const string& last_name): first_name(first_name), last_name(last_name) {}
};
//
User2 john_doe{"John", "Doe"};
User2 jane_doe{"Jane", "Doe"};
cout<<boolalpha<<(&jane_doe.last_name.get()==&john_doe.last_name.get()); // true