# containers/triple.hpp

    #ifndef STLPLUS_TRIPLE
    #define STLPLUS_TRIPLE
    ////////////////////////////////////////////////////////////////////////////////

    //   Author:    Andy Rushton, from an original by Dan Milton
    //   Copyright: (c) Southampton University 1999-2004
    //              (c) Andy Rushton           2004 onwards
    //   License:   BSD License, see ../docs/license.html

    //   Similar to the STL pair but with three elements

    ////////////////////////////////////////////////////////////////////////////////
    #include "containers_fixes.hpp"

    namespace stlplus
    {

      ////////////////////////////////////////////////////////////////////////////////
      // the triple class

      template<typename T1, typename T2, typename T3>
      struct triple
      {
        typedef T1 first_type;
        typedef T2 second_type;
        typedef T3 third_type;

        T1 first;
        T2 second;
        T3 third;

        triple(void);
        triple(const T1& p1, const T2& p2, const T3& p3);
        triple(const triple<T1,T2,T3>& t2);
      };

      ////////////////////////////////////////////////////////////////////////////////
      // creation

      template<typename T1, typename T2, typename T3>
      triple<T1,T2,T3> make_triple(const T1& first, const T2& second, const T3& third);

      ////////////////////////////////////////////////////////////////////////////////
      // comparison

      template<typename T1, typename T2, typename T3>
      bool operator == (const triple<T1,T2,T3>& left, const triple<T1,T2,T3>& right);
      template<typename T1, typename T2, typename T3>
      bool operator < (const triple<T1,T2,T3>& left, const triple<T1,T2,T3>& right);

      ////////////////////////////////////////////////////////////////////////////////

    } // end namespace stlplus

    #include "triple.tpp"
    #endif