// Copyright 2015-2018 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_COMMON_TYPE_HPP #define BOOST_HISTOGRAM_DETAIL_COMMON_TYPE_HPP #include #include #include #include #include #include namespace boost { namespace histogram { namespace detail { // clang-format off template using common_axes = mp11::mp_cond< is_tuple, T, is_tuple, U, is_sequence_of_axis, T, is_sequence_of_axis, U, std::true_type, T >; // clang-format on // Non-PODs rank highest, then floats, than integers; types with more capacity are higher template static constexpr std::size_t type_rank() { using T = typename Storage::value_type; return !std::is_pod::value * 10000 + std::is_floating_point::value * 100 + 10 * sizeof(T) + 2 * is_array_like::value + is_vector_like::value; ; } template using common_storage = mp11::mp_if_c<(type_rank() >= type_rank()), T, U>; } // namespace detail } // namespace histogram } // namespace boost #endif