/usr/include/boost/mp11/detail
Edit: /usr/include/boost/mp11/detail/mp_plus.hpp (2755B)
#ifndef BOOST_MP11_DETAIL_MP_PLUS_HPP_INCLUDED
#define BOOST_MP11_DETAIL_MP_PLUS_HPP_INCLUDED
// Copyright 2015 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
#include
#include
namespace boost
{
namespace mp11
{
// mp_plus
namespace detail
{
#if defined( BOOST_MP11_HAS_FOLD_EXPRESSIONS ) && !BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, < 1920 )
template struct mp_plus_impl
{
static const auto _v = (T::value + ... + 0);
using type = std::integral_constant::type, _v>;
};
#else
template struct mp_plus_impl;
template<> struct mp_plus_impl<>
{
using type = std::integral_constant;
};
#if BOOST_MP11_WORKAROUND( BOOST_MP11_GCC, < 40800 )
template struct mp_plus_impl
{
static const decltype(T1::value + mp_plus_impl::type::value) _v = T1::value + mp_plus_impl::type::value;
using type = std::integral_constant::type, _v>;
};
template struct mp_plus_impl
{
static const
decltype(T1::value + T2::value + T3::value + T4::value + T5::value + T6::value + T7::value + T8::value + T9::value + T10::value + mp_plus_impl::type::value)
_v = T1::value + T2::value + T3::value + T4::value + T5::value + T6::value + T7::value + T8::value + T9::value + T10::value + mp_plus_impl::type::value;
using type = std::integral_constant::type, _v>;
};
#else
template struct mp_plus_impl
{
static const auto _v = T1::value + mp_plus_impl::type::value;
using type = std::integral_constant::type, _v>;
};
template struct mp_plus_impl
{
static const auto _v = T1::value + T2::value + T3::value + T4::value + T5::value + T6::value + T7::value + T8::value + T9::value + T10::value + mp_plus_impl::type::value;
using type = std::integral_constant::type, _v>;
};
#endif
#endif
} // namespace detail
template using mp_plus = typename detail::mp_plus_impl::type;
} // namespace mp11
} // namespace boost
#endif // #ifndef BOOST_MP11_DETAIL_MP_PLUS_HPP_INCLUDED