![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/proto/functional/std/ |
Upload File : |
/////////////////////////////////////////////////////////////////////////////// /// \file utility.hpp /// Proto callables for things found in the std \<utility\> header // // Copyright 2010 Eric Niebler. 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) #ifndef BOOST_PROTO_FUNCTIONAL_STD_UTILITY_HPP_EAN_11_27_2010 #define BOOST_PROTO_FUNCTIONAL_STD_UTILITY_HPP_EAN_11_27_2010 #include <utility> #include <boost/type_traits/remove_const.hpp> #include <boost/type_traits/remove_reference.hpp> #include <boost/proto/proto_fwd.hpp> namespace boost { namespace proto { namespace functional { /// \brief A PolymorphicFunctionObject type that invokes the /// \c std::make_pair() algorithm on its arguments. /// /// A PolymorphicFunctionObject type that invokes the /// \c std::make_pair() algorithm on its arguments. struct make_pair { BOOST_PROTO_CALLABLE() template<typename Sig> struct result; template<typename This, typename First, typename Second> struct result<This(First, Second)> { typedef std::pair< typename remove_const<typename remove_reference<First>::type>::type , typename remove_const<typename remove_reference<Second>::type>::type > type; }; template<typename First, typename Second> std::pair<First, Second> operator()(First const &first, Second const &second) const { return std::make_pair(first, second); } }; /// \brief A PolymorphicFunctionObject type that returns /// the first element of a std::pair. /// /// A PolymorphicFunctionObject type that returns /// the first element of a std::pair.. struct first { BOOST_PROTO_CALLABLE() template<typename Sig> struct result; template<typename This, typename Pair> struct result<This(Pair)> { typedef typename Pair::first_type type; }; template<typename This, typename Pair> struct result<This(Pair &)> { typedef typename Pair::first_type &type; }; template<typename This, typename Pair> struct result<This(Pair const &)> { typedef typename Pair::first_type const &type; }; template<typename Pair> typename Pair::first_type &operator()(Pair &pair) const { return pair.first; } template<typename Pair> typename Pair::first_type const &operator()(Pair const &pair) const { return pair.first; } }; /// \brief A PolymorphicFunctionObject type that returns /// the second element of a std::pair. /// /// A PolymorphicFunctionObject type that returns /// the second element of a std::pair.. struct second { BOOST_PROTO_CALLABLE() template<typename Sig> struct result; template<typename This, typename Pair> struct result<This(Pair)> { typedef typename Pair::second_type type; }; template<typename This, typename Pair> struct result<This(Pair &)> { typedef typename Pair::second_type &type; }; template<typename This, typename Pair> struct result<This(Pair const &)> { typedef typename Pair::second_type const &type; }; template<typename Pair> typename Pair::second_type &operator()(Pair &pair) const { return pair.second; } template<typename Pair> typename Pair::second_type const &operator()(Pair const &pair) const { return pair.second; } }; }}} #endif