text: 
  // Copyright Aleksey Gurtovoy 2002-2004
  //
  // Distributed under the Boost Software License, Version 1.0. 
  // (See accompanying file LICENSE_1_0.txt or copy at 
  // http://www.boost.org/LICENSE_1_0.txt)
  //
  // See http://www.boost.org/libs/mpl for documentation.
  
  // $Source: /cvsroot/boost/boost/libs/mpl/example/inherit_multiply.cpp,v $
  // $Date: 2004/09/02 15:41:29 $
  // $Revision: 1.4 $
  
  #include <boost/mpl/inherit.hpp>
  #include <boost/mpl/inherit_linearly.hpp>
  #include <boost/mpl/list.hpp>
  
  #include <iostream>
  
  namespace mpl = boost::mpl;
  using namespace mpl::placeholders;
  
  template< typename T >
  struct tuple_field
  {
      typedef tuple_field type; // note the typedef
      T field_;
  };
  
  template< typename T >
  inline
  T& field(tuple_field<T>& t)
  {
      return t.field_;
  }
  
  typedef mpl::inherit_linearly<
        mpl::list<int,char const*,bool>
      , mpl::inherit< _1, tuple_field<_2> >
      >::type my_tuple;
      
  
  int main()
  {
      my_tuple t;
      
      field<int>(t) = -1;
      field<char const*>(t) = "text";
      field<bool>(t) = false;
  
      std::cout
          << field<int>(t) << '\n'
          << field<char const*>(t) << '\n'
          << field<bool>(t) << '\n'
          ;
  
      return 0;
  }
  