Listing 1: Example hierarchy.
template<typename Char>
struct personal_details
{
std::vector<
std::basic_string<Char> > forenames_;
std::basic_string<Char> surname_;
};
template<typename Char>
struct personal_details_married_female : virtual public personal_details<Char>
{
std::basic_string<Char> maiden_name_;
};
template<typename Char>
struct personal_details_parent : virtual public personal_details<Char>
{
std::vector<
std::basic_string<char> > children_;
};
template<typename Char>
struct personal_details_married_male_parent
: public personal_details_parent<Char>
{
};
template<typename Char>
struct personal_details_married_female_parent
: virtual public personal_details_married_female<Char>,
virtual public personal_details_parent<Char>
{
};