forked from boostorg/fusion
Initial constexpr support
This allows to use, e.g., boost::fusion::fold within constexpr functions. The BOOST_CONSTEXPR macro is used to declare functions constexpr.
This commit is contained in:
@@ -72,7 +72,7 @@ namespace boost { namespace fusion
|
||||
|
||||
|
||||
template <typename N, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
@@ -84,7 +84,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename N, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::at<Sequence const, N>::type
|
||||
at(Sequence const& seq)
|
||||
{
|
||||
@@ -92,7 +92,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <int N, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
@@ -104,7 +104,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <int N, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::at_c<Sequence const, N>::type
|
||||
at_c(Sequence const& seq)
|
||||
{
|
||||
|
@@ -38,7 +38,7 @@ namespace boost { namespace fusion
|
||||
>::type
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Seq& seq)
|
||||
{
|
||||
@@ -74,7 +74,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
@@ -86,7 +86,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::at_key<Sequence const, Key>::type
|
||||
at_key(Sequence const& seq)
|
||||
{
|
||||
|
@@ -27,7 +27,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::back<Sequence>::type
|
||||
back(Sequence& seq)
|
||||
{
|
||||
@@ -35,7 +35,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::back<Sequence const>::type
|
||||
back(Sequence const& seq)
|
||||
{
|
||||
|
@@ -71,7 +71,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
@@ -83,7 +83,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
|
@@ -32,7 +32,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
>
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq)
|
||||
{
|
||||
return type(
|
||||
|
@@ -38,7 +38,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
typedef cons<range_type, Context> type;
|
||||
typedef mpl::false_ continue_type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq, State const&, Context const& context, segmented_begin_fun)
|
||||
{
|
||||
return type(range_type(fusion::begin(seq), fusion::end(seq)), context);
|
||||
@@ -64,7 +64,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
|
||||
typedef typename fold_impl::type type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq, Stack const& stack)
|
||||
{
|
||||
return fold_impl::call(seq, end_impl::call(seq, stack), stack, segmented_begin_fun());
|
||||
@@ -79,7 +79,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
typedef iterator_range<begin_type, end_type> pair_type;
|
||||
typedef cons<pair_type, Stack> type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq, Stack stack)
|
||||
{
|
||||
return type(pair_type(fusion::begin(seq), fusion::end(seq)), stack);
|
||||
|
@@ -28,7 +28,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
>
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence & seq)
|
||||
{
|
||||
return type(
|
||||
|
@@ -48,7 +48,7 @@ namespace boost { namespace fusion { namespace detail
|
||||
typedef iterator_range<end_type, end_type> pair_type;
|
||||
typedef cons<pair_type, Stack> type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence & seq, Stack stack)
|
||||
{
|
||||
end_type end = fusion::end(fusion::segments(seq));
|
||||
|
@@ -51,7 +51,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::empty<Sequence>::type
|
||||
empty(Sequence const&)
|
||||
{
|
||||
|
@@ -71,7 +71,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
@@ -83,7 +83,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
|
@@ -26,7 +26,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::front<Sequence>::type
|
||||
front(Sequence& seq)
|
||||
{
|
||||
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::front<Sequence const>::type
|
||||
front(Sequence const& seq)
|
||||
{
|
||||
|
@@ -68,7 +68,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::has_key<Sequence, Key>::type
|
||||
has_key(Sequence const&)
|
||||
{
|
||||
|
@@ -54,7 +54,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
@@ -67,7 +67,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::segments<Sequence const>::type
|
||||
segments(Sequence const& seq)
|
||||
{
|
||||
|
@@ -78,7 +78,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::size<Sequence>::type
|
||||
size(Sequence const&)
|
||||
{
|
||||
|
@@ -40,7 +40,7 @@ namespace boost { namespace fusion {
|
||||
};
|
||||
|
||||
template<typename Elem>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
void operator()(Elem const& e) const
|
||||
{
|
||||
using std::swap;
|
||||
@@ -50,7 +50,7 @@ namespace boost { namespace fusion {
|
||||
}
|
||||
|
||||
template<typename Seq1, typename Seq2>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename enable_if<mpl::and_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >, void>::type
|
||||
swap(Seq1& lhs, Seq2& rhs)
|
||||
{
|
||||
|
@@ -93,7 +93,7 @@ namespace boost { namespace fusion
|
||||
}
|
||||
|
||||
template <typename N, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
@@ -102,12 +102,12 @@ namespace boost { namespace fusion
|
||||
at(Sequence& seq);
|
||||
|
||||
template <typename N, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::at<Sequence const, N>::type
|
||||
at(Sequence const& seq);
|
||||
|
||||
template <int N, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
@@ -116,22 +116,22 @@ namespace boost { namespace fusion
|
||||
at_c(Sequence& seq);
|
||||
|
||||
template <int N, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::at_c<Sequence const, N>::type
|
||||
at_c(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::back<Sequence>::type
|
||||
back(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::back<Sequence const>::type
|
||||
back(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
@@ -140,7 +140,7 @@ namespace boost { namespace fusion
|
||||
begin(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
@@ -149,12 +149,12 @@ namespace boost { namespace fusion
|
||||
begin(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::empty<Sequence>::type
|
||||
empty(Sequence const&);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
@@ -163,7 +163,7 @@ namespace boost { namespace fusion
|
||||
end(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
lazy_enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
@@ -172,22 +172,22 @@ namespace boost { namespace fusion
|
||||
end(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::front<Sequence>::type
|
||||
front(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::front<Sequence const>::type
|
||||
front(Sequence const& seq);
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::has_key<Sequence, Key>::type
|
||||
has_key(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
@@ -196,17 +196,17 @@ namespace boost { namespace fusion
|
||||
segments(Sequence& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::segments<Sequence const>::type
|
||||
segments(Sequence const& seq);
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::size<Sequence>::type
|
||||
size(Sequence const&);
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename
|
||||
lazy_disable_if<
|
||||
is_const<Sequence>
|
||||
@@ -215,7 +215,7 @@ namespace boost { namespace fusion
|
||||
at_key(Sequence& seq);
|
||||
|
||||
template <typename Key, typename Sequence>
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
typename result_of::at_key<Sequence const, Key>::type
|
||||
at_key(Sequence const& seq);
|
||||
}}
|
||||
|
Reference in New Issue
Block a user