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:
@ -22,7 +22,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::clear<Sequence const>::type
|
||||
clear(Sequence const& /*seq*/)
|
||||
{
|
||||
|
@ -21,7 +21,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
struct replacer_helper<false>
|
||||
{
|
||||
template <typename U, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static U&
|
||||
call(U& x, T const&, T const&)
|
||||
{
|
||||
@ -33,7 +33,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
struct replacer_helper<true>
|
||||
{
|
||||
template <typename U, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static U
|
||||
call(U& x, T const& old_value, T const& new_value)
|
||||
{
|
||||
@ -44,7 +44,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
template <typename T>
|
||||
struct replacer
|
||||
{
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
replacer(T const& in_old_value, T const& in_new_value)
|
||||
: old_value(in_old_value), new_value(in_new_value) {}
|
||||
|
||||
@ -59,9 +59,9 @@ namespace boost { namespace fusion { namespace detail
|
||||
mpl::if_<is_convertible<T, value>, value, value const&>::type
|
||||
type;
|
||||
};
|
||||
|
||||
|
||||
template <typename U>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result<replacer(U)>::type
|
||||
operator()(U const& x) const
|
||||
{
|
||||
|
@ -21,7 +21,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
struct replacer_if_helper<false>
|
||||
{
|
||||
template <typename U, typename F, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static U&
|
||||
call(U& x, F&, T const&)
|
||||
{
|
||||
@ -33,7 +33,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
struct replacer_if_helper<true>
|
||||
{
|
||||
template <typename U, typename F, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static U
|
||||
call(U& x, F& f, T const& new_value)
|
||||
{
|
||||
@ -44,7 +44,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
template <typename F, typename T>
|
||||
struct replacer_if
|
||||
{
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
replacer_if(F in_f, T const& in_new_value)
|
||||
: f(in_f), new_value(in_new_value) {}
|
||||
|
||||
@ -59,9 +59,9 @@ namespace boost { namespace fusion { namespace detail
|
||||
mpl::if_<is_convertible<T, value>, value, value const&>::type
|
||||
type;
|
||||
};
|
||||
|
||||
|
||||
template <typename U>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result<replacer_if(U)>::type
|
||||
operator()(U const& x) const
|
||||
{
|
||||
|
@ -38,21 +38,21 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(First const& first, mpl::false_)
|
||||
{
|
||||
return fusion::next(convert_iterator<First>::call(first));
|
||||
}
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(First const& first, mpl::true_)
|
||||
{
|
||||
return convert_iterator<First>::call(first);
|
||||
}
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(First const& first)
|
||||
{
|
||||
@ -61,7 +61,7 @@ namespace boost { namespace fusion
|
||||
};
|
||||
|
||||
struct use_default;
|
||||
|
||||
|
||||
template <class T, class Default>
|
||||
struct fusion_default_help
|
||||
: mpl::if_<
|
||||
@ -71,7 +71,7 @@ namespace boost { namespace fusion
|
||||
>
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
template <
|
||||
typename Sequence
|
||||
, typename First
|
||||
@ -89,7 +89,7 @@ namespace boost { namespace fusion
|
||||
, typename compute_erase_last<Sequence, First>::type
|
||||
>::type
|
||||
LastType;
|
||||
|
||||
|
||||
typedef typename convert_iterator<FirstType>::type first_type;
|
||||
typedef typename convert_iterator<LastType>::type last_type;
|
||||
typedef iterator_range<seq_first_type, first_type> left_type;
|
||||
@ -99,7 +99,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename First>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
@ -122,7 +122,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename First, typename Last>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::erase<Sequence const, First, Last>::type
|
||||
erase(Sequence const& seq, First const& first, Last const& last)
|
||||
{
|
||||
|
@ -24,7 +24,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::erase_key<Sequence const, Key>::type
|
||||
erase_key(Sequence const& seq)
|
||||
{
|
||||
|
@ -22,9 +22,9 @@ namespace boost { namespace fusion
|
||||
typedef filter_view<Sequence, is_same<mpl::_, T> > type;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
template <typename T, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::filter<Sequence const, T>::type
|
||||
filter(Sequence const& seq)
|
||||
{
|
||||
|
@ -20,9 +20,9 @@ namespace boost { namespace fusion
|
||||
typedef filter_view<Sequence, Pred> type;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
template <typename Pred, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::filter_if<Sequence const, Pred>::type
|
||||
filter_if(Sequence const& seq)
|
||||
{
|
||||
|
@ -25,13 +25,15 @@ namespace boost { namespace fusion { namespace result_of
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
template <typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::flatten<Sequence>::type
|
||||
flatten(Sequence& view)
|
||||
{
|
||||
return flatten_view<Sequence>(view);
|
||||
}
|
||||
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::flatten<Sequence const>::type
|
||||
flatten(Sequence const& view)
|
||||
{
|
||||
|
@ -41,9 +41,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename Position, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::insert<Sequence const, Position, T>
|
||||
|
@ -36,7 +36,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename Position, typename Range>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::insert_range<Sequence const, Position, Range const>::type
|
||||
insert_range(Sequence const& seq, Position const& pos, Range const& range)
|
||||
{
|
||||
|
@ -23,7 +23,7 @@ namespace boost { namespace fusion {
|
||||
}
|
||||
|
||||
template<typename LhSequence, typename RhSequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::join<LhSequence const, RhSequence const>::type
|
||||
join(LhSequence const& lhs, RhSequence const& rhs)
|
||||
{
|
||||
|
@ -33,7 +33,7 @@ namespace boost { namespace fusion
|
||||
|
||||
static bool const is_last = IsLast;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
pop_back_iterator(Iterator_ const& iterator_base)
|
||||
: base_type(iterator_base) {}
|
||||
|
||||
@ -42,7 +42,7 @@ namespace boost { namespace fusion
|
||||
{
|
||||
typedef pop_back_iterator<BaseIterator, is_last> type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(BaseIterator const& i)
|
||||
{
|
||||
@ -94,7 +94,7 @@ namespace boost { namespace fusion
|
||||
|
||||
typedef pop_back_iterator<base_prior, false> type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Iterator const& i)
|
||||
{
|
||||
@ -116,7 +116,7 @@ namespace boost { namespace fusion
|
||||
|
||||
typedef pop_back_iterator<base_prior, false> type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Iterator const& i)
|
||||
{
|
||||
@ -152,7 +152,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::pop_back<Sequence const>::type
|
||||
pop_back(Sequence const& seq)
|
||||
{
|
||||
|
@ -20,19 +20,19 @@ namespace boost { namespace fusion
|
||||
template <typename Sequence>
|
||||
struct pop_front
|
||||
{
|
||||
typedef
|
||||
typedef
|
||||
iterator_range<
|
||||
typename next<
|
||||
typename begin<Sequence>::type
|
||||
>::type
|
||||
, typename end<Sequence>::type
|
||||
>
|
||||
>
|
||||
type;
|
||||
};
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::pop_front<Sequence const>::type
|
||||
pop_front(Sequence const& seq)
|
||||
{
|
||||
|
@ -27,9 +27,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::push_back<Sequence const, T>
|
||||
|
@ -27,9 +27,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, result_of::push_front<Sequence const, T>
|
||||
|
@ -24,7 +24,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename T, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::remove<Sequence const, T>::type
|
||||
remove(Sequence const& seq)
|
||||
{
|
||||
|
@ -24,7 +24,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Pred, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::remove_if<Sequence const, Pred>::type
|
||||
remove_if(Sequence const& seq)
|
||||
{
|
||||
|
@ -25,9 +25,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, typename result_of::replace<Sequence const, T>::type
|
||||
|
@ -26,9 +26,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F, typename T>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, typename result_of::replace_if<Sequence const, F, T>::type
|
||||
|
@ -24,9 +24,8 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
inline
|
||||
typename
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, reverse_view<Sequence const>
|
||||
|
@ -34,7 +34,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::transform<Sequence const, F>::type
|
||||
transform(Sequence const& seq, F f)
|
||||
{
|
||||
@ -42,7 +42,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence1, typename Sequence2, typename F>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::transform<Sequence1 const, Sequence2 const, F>::type
|
||||
transform(Sequence1 const& seq1, Sequence2 const& seq2, F f)
|
||||
{
|
||||
|
@ -101,7 +101,7 @@ namespace boost { namespace fusion
|
||||
#define FUSION_REF_PARAM(z, n, data) const T ## n&
|
||||
|
||||
template<BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, typename T)>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<BOOST_PP_ENUM_PARAMS(ZIP_ITERATION, const T)>::type
|
||||
zip(BOOST_PP_ENUM_BINARY_PARAMS(ZIP_ITERATION, T, const& t))
|
||||
{
|
||||
|
Reference in New Issue
Block a user