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:
@ -138,7 +138,7 @@
|
||||
>::type \
|
||||
type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type \
|
||||
call(Seq& seq) \
|
||||
{ \
|
||||
@ -158,7 +158,7 @@
|
||||
{ \
|
||||
typedef char const* type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type \
|
||||
call() \
|
||||
{ \
|
||||
|
@ -33,7 +33,7 @@ namespace boost { namespace fusion { namespace extension
|
||||
>
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Seq& seq)
|
||||
{
|
||||
@ -57,7 +57,7 @@ namespace boost { namespace fusion { namespace extension
|
||||
>
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Seq& seq)
|
||||
{
|
||||
|
@ -62,7 +62,7 @@
|
||||
ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
\
|
||||
template<typename Seq> \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
self_type& \
|
||||
operator=(Seq const& seq) \
|
||||
{ \
|
||||
@ -121,7 +121,7 @@
|
||||
ATTRIBUTE_TUPEL_SIZE, \
|
||||
ATTRIBUTES_SEQ) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME() \
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
@ -130,7 +130,7 @@
|
||||
ATTRIBUTES_SEQ) \
|
||||
{} \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(self_type const& other_self) \
|
||||
: BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
@ -140,7 +140,7 @@
|
||||
{} \
|
||||
\
|
||||
template<typename Seq> \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(Seq const& seq \
|
||||
BOOST_PP_IF( \
|
||||
BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
|
||||
@ -160,7 +160,7 @@
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_1( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
explicit \
|
||||
NAME(boost::call_traits< \
|
||||
BOOST_PP_TUPLE_ELEM( \
|
||||
@ -173,7 +173,7 @@
|
||||
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
explicit \
|
||||
NAME(typename boost::call_traits< \
|
||||
typename boost::fusion::detail::get_first_arg< \
|
||||
@ -210,7 +210,7 @@
|
||||
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N( \
|
||||
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I, \
|
||||
@ -238,7 +238,7 @@
|
||||
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_N( \
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
|
||||
1, \
|
||||
BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I, \
|
||||
@ -280,12 +280,12 @@
|
||||
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
|
||||
\
|
||||
template<typename Seq> \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(Seq const&) \
|
||||
{} \
|
||||
\
|
||||
template<typename Seq> \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
self_type& \
|
||||
operator=(Seq const& seq) \
|
||||
{ \
|
||||
|
@ -66,6 +66,7 @@
|
||||
#define BOOST_FUSION_IGNORE_2(ARG1, ARG2)
|
||||
|
||||
#define BOOST_FUSION_MAKE_COPY_CONSTRUCTOR(NAME, ATTRIBUTES_SEQ) \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(BOOST_PP_SEQ_FOR_EACH_I( \
|
||||
BOOST_FUSION_MAKE_CONST_REF_PARAM, \
|
||||
~, \
|
||||
@ -113,7 +114,7 @@
|
||||
struct deref<SPEC_TYPE, N> > \
|
||||
{ \
|
||||
typedef typename boost_fusion_detail_Sq::t##N##_type TYPE_QUAL& type; \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(CALL_ARG_TYPE, N> const& iter) \
|
||||
{ \
|
||||
return iter.seq_.BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \
|
||||
@ -163,7 +164,7 @@
|
||||
typename boost_fusion_detail_Sq::t##N##_type& \
|
||||
>::type type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(boost_fusion_detail_Sq& sq) \
|
||||
{ \
|
||||
return sq. BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \
|
||||
@ -208,7 +209,7 @@
|
||||
result_raw_type \
|
||||
>::type type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(iterator_raw_type const& iter) \
|
||||
{ \
|
||||
return boost::fusion::at_c<index>(iter.ref_vec); \
|
||||
@ -336,7 +337,7 @@
|
||||
typedef boost::mpl::int_<N> index; \
|
||||
typedef boost_fusion_detail_Seq sequence_type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_FUSION_ITERATOR_NAME(NAME)(boost_fusion_detail_Seq& seq) \
|
||||
: seq_(seq) \
|
||||
BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES( \
|
||||
@ -359,7 +360,7 @@
|
||||
boost_fusion_detail_It::index::value + 1 \
|
||||
> type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(boost_fusion_detail_It const& it) \
|
||||
{ \
|
||||
return type(it.seq_); \
|
||||
@ -374,7 +375,7 @@
|
||||
boost_fusion_detail_It::index::value - 1 \
|
||||
> type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(boost_fusion_detail_It const& it) \
|
||||
{ \
|
||||
return type(it.seq_); \
|
||||
@ -392,7 +393,7 @@
|
||||
typename boost_fusion_detail_It1::index \
|
||||
>::type type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(boost_fusion_detail_It1 const& /* it1 */, \
|
||||
boost_fusion_detail_It2 const& /* it2 */) \
|
||||
{ \
|
||||
@ -412,7 +413,7 @@
|
||||
+ boost_fusion_detail_M::value \
|
||||
> type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(boost_fusion_detail_It const& it) \
|
||||
{ \
|
||||
return type(it.seq_); \
|
||||
@ -445,14 +446,14 @@
|
||||
(NAME, ATTRIBUTES_SEQ) \
|
||||
\
|
||||
template <typename boost_fusion_detail_Seq> \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(const boost_fusion_detail_Seq& rhs) \
|
||||
{ \
|
||||
boost::fusion::copy(rhs, *this); \
|
||||
} \
|
||||
\
|
||||
template <typename boost_fusion_detail_Seq> \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME& operator=(const boost_fusion_detail_Seq& rhs) \
|
||||
{ \
|
||||
boost::fusion::copy(rhs, *this); \
|
||||
@ -465,7 +466,7 @@
|
||||
typedef BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, 0> \
|
||||
type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(boost_fusion_detail_Sq& sq) \
|
||||
{ \
|
||||
return type(sq); \
|
||||
@ -480,7 +481,7 @@
|
||||
ATTRIBUTES_SEQ_SIZE \
|
||||
> type; \
|
||||
\
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
static type call(boost_fusion_detail_Sq& sq) \
|
||||
{ \
|
||||
return type(sq); \
|
||||
|
@ -28,9 +28,8 @@ namespace boost { namespace fusion { namespace extension
|
||||
|
||||
typedef typename impl::type type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
static
|
||||
type
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(It const& it)
|
||||
{
|
||||
return impl::call(*it.seq);
|
||||
|
@ -33,7 +33,7 @@ namespace boost { namespace fusion { namespace extension
|
||||
>
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Seq& seq)
|
||||
{
|
||||
@ -57,7 +57,7 @@ namespace boost { namespace fusion { namespace extension
|
||||
>
|
||||
type;
|
||||
|
||||
BOOST_FUSION_GPU_ENABLED
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Seq& seq)
|
||||
{
|
||||
|
@ -19,7 +19,7 @@
|
||||
\
|
||||
struct NAME \
|
||||
{ \
|
||||
BOOST_FUSION_GPU_ENABLED \
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
|
||||
NAME(WRAPPED_TYPE& in_obj) \
|
||||
: obj(in_obj) \
|
||||
{} \
|
||||
|
Reference in New Issue
Block a user