forked from boostorg/fusion
More constexpr and noexcept support.
Note 1: Forwarding functions are specified as a C++14 constexpr since std::forward is not a constexpr within C++11. Note 2: Though I'm not sure why it doesn't compile, some declarations are specified as a C++14 constexpr or non-constexpr. Note 3: Boost.Tuple adaptation and TR1-based tuple implementations are not constexpr.
This commit is contained in:
@ -26,9 +26,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename State, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::accumulate<Sequence, State const, F>
|
||||
@ -39,9 +38,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename State, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::accumulate<Sequence const, State const, F>
|
||||
|
@ -20,8 +20,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename State, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::accumulate<Sequence, State const, F>
|
||||
@ -29,8 +29,8 @@ namespace boost { namespace fusion
|
||||
accumulate(Sequence& seq, State const& state, F f);
|
||||
|
||||
template <typename Sequence, typename State, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::accumulate<Sequence const, State const, F>
|
||||
|
@ -21,14 +21,14 @@ namespace boost { namespace fusion {
|
||||
namespace detail
|
||||
{
|
||||
template <typename First, typename Last, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_linear(First const&, Last const&, F const&, mpl::true_)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
template <typename First, typename Last, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_linear(First const& first, Last const& last, F const& f, mpl::false_)
|
||||
{
|
||||
@ -39,7 +39,7 @@ namespace detail
|
||||
|
||||
|
||||
template <typename Sequence, typename F, typename Tag>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_dispatch(Sequence& seq, F const& f, Tag)
|
||||
{
|
||||
@ -56,7 +56,7 @@ namespace detail
|
||||
struct for_each_unrolled
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
{
|
||||
f(*i0);
|
||||
@ -77,7 +77,7 @@ namespace detail
|
||||
struct for_each_unrolled<3>
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
{
|
||||
f(*i0);
|
||||
@ -94,7 +94,7 @@ namespace detail
|
||||
struct for_each_unrolled<2>
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
{
|
||||
f(*i0);
|
||||
@ -108,7 +108,7 @@ namespace detail
|
||||
struct for_each_unrolled<1>
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
{
|
||||
f(*i0);
|
||||
@ -119,14 +119,14 @@ namespace detail
|
||||
struct for_each_unrolled<0>
|
||||
{
|
||||
template<typename It, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(It const&, F const&)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_dispatch(Sequence& seq, F const& f, random_access_traversal_tag)
|
||||
{
|
||||
@ -136,7 +136,7 @@ namespace detail
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each(Sequence& seq, F const& f, mpl::false_) // unsegmented implementation
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
template <typename Fun>
|
||||
struct segmented_fold_fun
|
||||
{
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
explicit segmented_fold_fun(Fun const& f)
|
||||
: fun(f)
|
||||
{}
|
||||
@ -29,7 +29,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
typedef typename result_of::fold<Sequence, State, Fun>::type type;
|
||||
typedef mpl::true_ continue_type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq, State const& state, Context const&, segmented_fold_fun const& fun)
|
||||
{
|
||||
return fusion::fold(seq, state, fun.fun);
|
||||
@ -52,7 +52,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
>::type
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(State& state, Sequence& seq, Fun fun)
|
||||
{
|
||||
return fusion::segmented_fold_until(seq, state, segmented_fold_fun<Fun>(fun));
|
||||
|
@ -18,7 +18,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
template <typename Fun>
|
||||
struct segmented_for_each_fun
|
||||
{
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
explicit segmented_for_each_fun(Fun const& f)
|
||||
: fun(f)
|
||||
{}
|
||||
@ -31,7 +31,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
typedef void_ type;
|
||||
typedef mpl::true_ continue_type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq, State const&, Context const&, segmented_for_each_fun const& fun)
|
||||
{
|
||||
fusion::for_each(seq, fun.fun);
|
||||
@ -41,7 +41,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
};
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each(Sequence& seq, F const& f, mpl::true_) // segmented implementation
|
||||
{
|
||||
|
@ -27,9 +27,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, void
|
||||
@ -40,9 +39,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, void
|
||||
|
@ -20,9 +20,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, void
|
||||
@ -30,9 +29,8 @@ namespace boost { namespace fusion
|
||||
for_each(Sequence& seq, F const& f);
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, void
|
||||
|
Reference in New Issue
Block a user