text: // Boost.Bimap
  //
  // Copyright (c) 2006-2007 Matias Capeletto
  //
  // 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)
  
  /// \file relation/support/pair_by.hpp
  /// \brief pair_by<member>(r) function
  
  #ifndef BOOST_BIMAP_RELATION_SUPPORT_PAIR_BY_HPP
  #define BOOST_BIMAP_RELATION_SUPPORT_PAIR_BY_HPP
  
  #if defined(_MSC_VER)
  #pragma once
  #endif
  
  #include <boost/config.hpp>
  
  #include <boost/bimap/relation/support/pair_type_by.hpp>
  #include <boost/bimap/relation/detail/access_builder.hpp>
  
  #ifdef BOOST_BIMAP_ONLY_DOXYGEN_WILL_PROCESS_THE_FOLLOWING_LINES
  
  namespace lslboost {
  namespace bimaps {
  namespace relation {
  namespace support {
  
  /** \brief Gets a pair view of the relation.
  
  \ingroup relation_group
                                                                          **/
  
  template< class Tag, class Relation >
  BOOST_DEDUCED_TYPENAME result_of::pair_by<Tag,Relation>::type
      pair_by( Relation & rel );
  
  } // namespace support
  } // namespace relation
  } // namespace bimaps
  } // namespace lslboost
  
  #endif // BOOST_BIMAP_ONLY_DOXYGEN_WILL_PROCESS_THE_FOLLOWING_LINES
  
  
  #ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
  
  namespace lslboost {
  namespace bimaps {
  namespace relation {
  namespace support {
  
  
  // Since it is very error-prone to directly write the hole bunch
  // of relation accesor. They are buil from litle macro blocks that
  // are both more readable, leading to self docummenting code and a
  // lot more easier to understand and mantain.
  // It is very important to note that the three building blocks have
  // to laid in the same namespace in order to work. There is also
  // important to keep them in order.
  // The forward declaration are not necesary but they help a lot to
  // the reader, as they undercover what is the signature of the
  // result code.
  // In the end, it is not quicker to do it in this way because you
  // write a lot. But this code has no complexity at all and almost
  // every word writed is for documentation.
  
  // Result of
  // -------------------------------------------------------------------------
  /*
      namespace result_of {
  
      template< class Tag, class Relation >
      struct pair_by<Tag,Relation>;
      {
          typedef -unspecified- type;
      };
  
      } // namespace result_of
  */
  
  BOOST_BIMAP_SYMMETRIC_ACCESS_RESULT_OF_BUILDER
  (
      pair_by,
      pair_type_by
  )
  
  
  
  // Implementation
  // -------------------------------------------------------------------------
  
  BOOST_BIMAP_SYMMETRIC_ACCESS_IMPLEMENTATION_BUILDER
  (
      pair_by,
      Relation,
      rel,
      return rel.get_left_pair(),
      return rel.get_right_pair()
  )
  
  // Interface
  // --------------------------------------------------------------------------
  
  BOOST_BIMAP_SYMMETRIC_ACCESS_INTERFACE_BUILDER
  (
      pair_by
  )
  
  } // namespace support
  } // namespace relation
  } // namespace bimaps
  } // namespace lslboost
  
  
  #endif // BOOST_BIMAP_DOXIGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
  
  #endif // BOOST_BIMAP_RELATION_SUPPORT_PAIR_BY_HPP
  