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:
Kohei Takahashi
2015-03-03 02:21:02 +09:00
parent d7c918e36f
commit 2114bfca6c
280 changed files with 1107 additions and 935 deletions

View File

@ -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() \
{ \

View File

@ -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)
{

View File

@ -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) \
{ \

View File

@ -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); \

View File

@ -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);

View File

@ -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)
{

View File

@ -19,7 +19,7 @@
\
struct NAME \
{ \
BOOST_FUSION_GPU_ENABLED \
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED \
NAME(WRAPPED_TYPE& in_obj) \
: obj(in_obj) \
{} \