// Copyright 2019 Hans Dembinski // // 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_HISTOGRAM_DETAIL_ACCUMULATOR_TRAITS_HPP #define BOOST_HISTOGRAM_DETAIL_ACCUMULATOR_TRAITS_HPP #include #include #include namespace boost { namespace accumulators { template struct accumulator_set; } namespace histogram { namespace detail { template struct accumulator_traits_holder { using wsupport = std::integral_constant; using args = std::tuple; }; template accumulator_traits_holder accumulator_traits_impl_2( R (T::*)(boost::histogram::weight_type, Ts...)); template accumulator_traits_holder accumulator_traits_impl_2( R (T::*)(boost::histogram::weight_type&&, Ts...)); template accumulator_traits_holder accumulator_traits_impl_2( R (T::*)(const boost::histogram::weight_type&, Ts...)); template accumulator_traits_holder accumulator_traits_impl_2(R (T::*)(Ts...)); template auto accumulator_traits_impl(T&) -> decltype(std::declval() += 0, accumulator_traits_holder{}); template auto accumulator_traits_impl(T&) -> decltype(accumulator_traits_impl_2(&T::operator())); // for boost.accumulators compatibility template accumulator_traits_holder accumulator_traits_impl( boost::accumulators::accumulator_set&); template using accumulator_traits = decltype(accumulator_traits_impl(std::declval())); } // namespace detail } // namespace histogram } // namespace boost #endif