/*============================================================================= Copyright (c) 2005 Joel de Guzman Copyright (c) 2006 Tobias Schwinger 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) ==============================================================================*/ #if !defined(FUSION_PAIR_07222005_1203) #define FUSION_PAIR_07222005_1203 #include #include namespace boost { namespace fusion { // A half runtime pair where the first type does not have data template struct pair { pair() : second() {} pair(typename detail::call_param::type val) : second(val) {} template pair(pair const& rhs) : second(rhs.second) {} template pair& operator=(pair const& rhs) { second = rhs.second; return *this; } typedef First first_type; typedef Second second_type; Second second; }; namespace result_of { template struct make_pair { typedef fusion::pair::type> type; }; template struct first { typedef typename Pair::first_type type; }; template struct second { typedef typename Pair::second_type type; }; } template inline typename result_of::make_pair::type make_pair(Second const& val) { return pair::type>(val); } template inline OStream& operator<<(OStream& os, pair const& p) { os << p.second; return os; } template inline IStream& operator>>(IStream& is, pair& p) { is >> p.second; return is; } template inline bool operator==(pair const& l, pair const& r) { return l.second == r.second; } template inline bool operator!=(pair const& l, pair const& r) { return l.second != r.second; } }} #endif