#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. // #include #include #if BOOST_CXX_VERSION >= 201700L #include #endif namespace boost { namespace _bi { template struct result_traits { typedef R type; }; struct unspecified {}; template struct result_traits { typedef typename F::result_type type; }; template struct result_traits< unspecified, reference_wrapper > { typedef typename F::result_type type; }; #if BOOST_CXX_VERSION >= 201700L template struct result_traits< unspecified, std::plus > { typedef T type; }; template struct result_traits< unspecified, std::minus > { typedef T type; }; template struct result_traits< unspecified, std::multiplies > { typedef T type; }; template struct result_traits< unspecified, std::divides > { typedef T type; }; template struct result_traits< unspecified, std::modulus > { typedef T type; }; template struct result_traits< unspecified, std::negate > { typedef T type; }; template struct result_traits< unspecified, std::equal_to > { typedef bool type; }; template struct result_traits< unspecified, std::not_equal_to > { typedef bool type; }; template struct result_traits< unspecified, std::greater > { typedef bool type; }; template struct result_traits< unspecified, std::less > { typedef bool type; }; template struct result_traits< unspecified, std::greater_equal > { typedef bool type; }; template struct result_traits< unspecified, std::less_equal > { typedef bool type; }; template struct result_traits< unspecified, std::logical_and > { typedef bool type; }; template struct result_traits< unspecified, std::logical_or > { typedef bool type; }; template struct result_traits< unspecified, std::logical_not > { typedef bool type; }; template struct result_traits< unspecified, std::bit_and > { typedef T type; }; template struct result_traits< unspecified, std::bit_or > { typedef T type; }; template struct result_traits< unspecified, std::bit_xor > { typedef T type; }; #if defined(BOOST_LIBSTDCXX_VERSION) && BOOST_LIBSTDCXX_VERSION < 40900 // libstdc++ 4.8 and below don't have std::bit_not #else template struct result_traits< unspecified, std::bit_not > { typedef T type; }; #endif #endif } // namespace _bi } // namespace boost #endif // #ifndef BOOST_BIND_DETAIL_RESULT_TRAITS_HPP_INCLUDED