Chris@16: // (C) Copyright John Maddock 2005. Chris@16: // Use, modification and distribution are subject to the Chris@16: // Boost Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_TR1_FUNCTIONAL_HPP_INCLUDED Chris@16: # define BOOST_TR1_FUNCTIONAL_HPP_INCLUDED Chris@16: # include Chris@16: # include Chris@16: Chris@16: #if defined(BOOST_HAS_TR1_REFERENCE_WRAPPER) \ Chris@16: || defined(BOOST_HAS_TR1_RESULT_OF)\ Chris@16: || defined(BOOST_HAS_TR1_MEM_FN)\ Chris@16: || defined(BOOST_HAS_TR1_BIND)\ Chris@16: || defined(BOOST_HAS_TR1_FUNCTION)\ Chris@16: || defined(BOOST_HAS_TR1_HASH) Chris@16: # if defined(BOOST_HAS_INCLUDE_NEXT) && !defined(BOOST_TR1_DISABLE_INCLUDE_NEXT) Chris@16: # include_next BOOST_TR1_HEADER(functional) Chris@16: # else Chris@16: # include Chris@16: # include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(functional)) Chris@16: # endif Chris@16: #endif Chris@16: Chris@16: #ifndef BOOST_HAS_TR1_REFERENCE_WRAPPER Chris@16: Chris@16: #include Chris@16: Chris@16: namespace std{ namespace tr1{ Chris@16: Chris@16: using ::boost::reference_wrapper; Chris@16: using ::boost::ref; Chris@16: using ::boost::cref; Chris@16: Chris@16: } } Chris@16: Chris@16: #endif // BOOST_HAS_TR1_REFERENCE_WRAPPER Chris@16: Chris@16: #if !defined(BOOST_HAS_TR1_RESULT_OF)\ Chris@101: && !defined(BOOST_NO_SFINAE) Chris@16: Chris@16: // Chris@16: // we can only actually include result_of.hpp if the compiler Chris@16: // really does support it, otherwise we just get endless errors... Chris@16: // Chris@16: #include Chris@16: Chris@16: namespace std{ namespace tr1{ Chris@16: Chris@16: template Chris@16: struct result_of Chris@16: : ::boost::tr1_result_of Chris@16: {}; Chris@16: Chris@16: } } Chris@16: Chris@16: #endif // BOOST_HAS_TR1_RESULT_OF Chris@16: Chris@16: #ifndef BOOST_HAS_TR1_MEM_FN Chris@16: // mem_fn: Chris@16: #include Chris@16: Chris@16: namespace std{ namespace tr1{ Chris@16: Chris@16: using boost::mem_fn; Chris@16: Chris@16: } } Chris@16: Chris@16: #endif // BOOST_HAS_TR1_MEM_FN Chris@16: Chris@16: Chris@16: #ifndef BOOST_HAS_TR1_BIND Chris@16: // Bind: Chris@16: #include Chris@16: Chris@16: namespace std{ namespace tr1{ Chris@16: Chris@16: using ::boost::is_bind_expression; Chris@16: using ::boost::is_placeholder; Chris@16: using ::boost::bind; Chris@16: namespace placeholders { Chris@16: #ifndef BOOST_BIND_NO_PLACEHOLDERS Chris@16: using ::_1; Chris@16: using ::_2; Chris@16: using ::_3; Chris@16: using ::_4; Chris@16: using ::_5; Chris@16: using ::_6; Chris@16: using ::_7; Chris@16: using ::_8; Chris@16: using ::_9; Chris@16: #endif Chris@16: } // placeholders Chris@16: Chris@16: } } Chris@16: Chris@16: #endif Chris@16: Chris@16: #ifndef BOOST_HAS_TR1_FUNCTION Chris@16: // polymorphic function object wrappers: Chris@16: #include Chris@16: #include Chris@16: Chris@16: #if !BOOST_WORKAROUND(__BORLANDC__, < 0x582) \ Chris@16: && !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX) Chris@16: namespace std{ namespace tr1{ Chris@16: Chris@16: using ::boost::bad_function_call; Chris@16: using ::boost::function; Chris@16: using ::boost::swap; Chris@16: Chris@16: }} Chris@16: #endif Chris@16: Chris@16: #endif // BOOST_HAS_TR1_FUNCTION Chris@16: Chris@16: #ifndef BOOST_HAS_TR1_HASH Chris@16: // Chris@16: // This header can get included by boost/hash.hpp Chris@16: // leading to cyclic dependencies. As a workaround Chris@16: // we forward declare boost::hash and include Chris@16: // the actual header later. Chris@16: // Chris@16: namespace boost{ Chris@16: template struct hash; Chris@16: } Chris@16: Chris@16: namespace std{ namespace tr1{ Chris@16: //using ::boost::hash; Chris@16: Chris@16: template Chris@16: struct hash : public boost::hash Chris@16: { Chris@16: }; Chris@16: Chris@16: }} Chris@16: Chris@16: #include Chris@16: Chris@16: #endif Chris@16: Chris@16: #endif Chris@16: