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>
{
};