| #ifndef BOOST_BIND_DETAIL_RESULT_TRAITS_HPP_INCLUDED |
| #define BOOST_BIND_DETAIL_RESULT_TRAITS_HPP_INCLUDED |
| |
| // MS compatible compilers support #pragma once |
| |
| #if defined(_MSC_VER) && (_MSC_VER >= 1020) |
| # pragma once |
| #endif |
| |
| // |
| // bind/detail/result_traits.hpp |
| // |
| // boost/bind.hpp support header, return type deduction |
| // |
| // Copyright 2006, 2020 Peter Dimov |
| // |
| // 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 |
| // |
| // See http://www.boost.org/libs/bind/bind.html for documentation. |
| // |
| |
| #if defined(_MSVC_LANG) && _MSVC_LANG >= 17 |
| #include <functional> |
| #endif |
| |
| namespace boost |
| { |
| |
| namespace _bi |
| { |
| |
| template<class R, class F> struct result_traits |
| { |
| typedef R type; |
| }; |
| |
| struct unspecified {}; |
| |
| template<class F> struct result_traits<unspecified, F> |
| { |
| typedef typename F::result_type type; |
| }; |
| |
| template<class F> struct result_traits< unspecified, reference_wrapper<F> > |
| { |
| typedef typename F::result_type type; |
| }; |
| |
| #if defined(_MSVC_LANG) && _MSVC_LANG >= 17 |
| |
| template<class T> struct result_traits< unspecified, std::plus<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::minus<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::multiplies<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::divides<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::modulus<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::negate<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::equal_to<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::not_equal_to<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::greater<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::less<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::greater_equal<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::less_equal<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::logical_and<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::logical_or<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::logical_not<T> > |
| { |
| typedef bool type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::bit_and<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::bit_or<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::bit_xor<T> > |
| { |
| typedef T type; |
| }; |
| |
| template<class T> struct result_traits< unspecified, std::bit_not<T> > |
| { |
| typedef T type; |
| }; |
| |
| #endif |
| |
| } // namespace _bi |
| |
| } // namespace boost |
| |
| #endif // #ifndef BOOST_BIND_DETAIL_RESULT_TRAITS_HPP_INCLUDED |