From 49e1fbb0f571c844ef9dbac8de27729d22059ed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Mon, 7 Sep 2015 18:17:54 +0200 Subject: [PATCH 1/7] New macros for two-dimension expansion --- include/boost/move/detail/fwd_macros.hpp | 268 ++++++++++++++++++++--- 1 file changed, 232 insertions(+), 36 deletions(-) diff --git a/include/boost/move/detail/fwd_macros.hpp b/include/boost/move/detail/fwd_macros.hpp index 8d5ab2e..e091890 100644 --- a/include/boost/move/detail/fwd_macros.hpp +++ b/include/boost/move/detail/fwd_macros.hpp @@ -65,7 +65,7 @@ namespace move_detail { //BOOST_MOVE_REPEATN(MACRO) #define BOOST_MOVE_REPEAT0(MACRO) -#define BOOST_MOVE_REPEAT1(MACRO) MACRO +#define BOOST_MOVE_REPEAT1(MACRO) MACRO #define BOOST_MOVE_REPEAT2(MACRO) BOOST_MOVE_REPEAT1(MACRO), MACRO #define BOOST_MOVE_REPEAT3(MACRO) BOOST_MOVE_REPEAT2(MACRO), MACRO #define BOOST_MOVE_REPEAT4(MACRO) BOOST_MOVE_REPEAT3(MACRO), MACRO @@ -77,7 +77,7 @@ namespace move_detail { //BOOST_MOVE_FWDN #define BOOST_MOVE_FWD0 -#define BOOST_MOVE_FWD1 ::boost::forward(p0) +#define BOOST_MOVE_FWD1 ::boost::forward(p0) #define BOOST_MOVE_FWD2 BOOST_MOVE_FWD1, ::boost::forward(p1) #define BOOST_MOVE_FWD3 BOOST_MOVE_FWD2, ::boost::forward(p2) #define BOOST_MOVE_FWD4 BOOST_MOVE_FWD3, ::boost::forward(p3) @@ -89,7 +89,7 @@ namespace move_detail { //BOOST_MOVE_FWDQN #define BOOST_MOVE_FWDQ0 -#define BOOST_MOVE_FWDQ1 ::boost::forward(q0) +#define BOOST_MOVE_FWDQ1 ::boost::forward(q0) #define BOOST_MOVE_FWDQ2 BOOST_MOVE_FWDQ1, ::boost::forward(q1) #define BOOST_MOVE_FWDQ3 BOOST_MOVE_FWDQ2, ::boost::forward(q2) #define BOOST_MOVE_FWDQ4 BOOST_MOVE_FWDQ3, ::boost::forward(q3) @@ -101,7 +101,7 @@ namespace move_detail { //BOOST_MOVE_ARGN #define BOOST_MOVE_ARG0 -#define BOOST_MOVE_ARG1 p0 +#define BOOST_MOVE_ARG1 p0 #define BOOST_MOVE_ARG2 BOOST_MOVE_ARG1, p1 #define BOOST_MOVE_ARG3 BOOST_MOVE_ARG2, p2 #define BOOST_MOVE_ARG4 BOOST_MOVE_ARG3, p3 @@ -111,9 +111,21 @@ namespace move_detail { #define BOOST_MOVE_ARG8 BOOST_MOVE_ARG7, p7 #define BOOST_MOVE_ARG9 BOOST_MOVE_ARG8, p8 +//BOOST_MOVE_ARGQN +#define BOOST_MOVE_ARGQ0 +#define BOOST_MOVE_ARGQ1 q0 +#define BOOST_MOVE_ARGQ2 BOOST_MOVE_ARGQ1, q1 +#define BOOST_MOVE_ARGQ3 BOOST_MOVE_ARGQ2, q2 +#define BOOST_MOVE_ARGQ4 BOOST_MOVE_ARGQ3, q3 +#define BOOST_MOVE_ARGQ5 BOOST_MOVE_ARGQ4, q4 +#define BOOST_MOVE_ARGQ6 BOOST_MOVE_ARGQ5, q5 +#define BOOST_MOVE_ARGQ7 BOOST_MOVE_ARGQ6, q6 +#define BOOST_MOVE_ARGQ8 BOOST_MOVE_ARGQ7, q7 +#define BOOST_MOVE_ARGQ9 BOOST_MOVE_ARGQ8, q8 + //BOOST_MOVE_DECLVALN #define BOOST_MOVE_DECLVAL0 -#define BOOST_MOVE_DECLVAL1 ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVAL1 ::boost::move_detail::declval() #define BOOST_MOVE_DECLVAL2 BOOST_MOVE_DECLVAL1, ::boost::move_detail::declval() #define BOOST_MOVE_DECLVAL3 BOOST_MOVE_DECLVAL2, ::boost::move_detail::declval() #define BOOST_MOVE_DECLVAL4 BOOST_MOVE_DECLVAL3, ::boost::move_detail::declval() @@ -123,19 +135,36 @@ namespace move_detail { #define BOOST_MOVE_DECLVAL8 BOOST_MOVE_DECLVAL7, ::boost::move_detail::declval() #define BOOST_MOVE_DECLVAL9 BOOST_MOVE_DECLVAL8, ::boost::move_detail::declval() +//BOOST_MOVE_DECLVALQN +#define BOOST_MOVE_DECLVALQ0 +#define BOOST_MOVE_DECLVALQ1 ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVALQ2 BOOST_MOVE_DECLVALQ1, ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVALQ3 BOOST_MOVE_DECLVALQ2, ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVALQ4 BOOST_MOVE_DECLVALQ3, ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVALQ5 BOOST_MOVE_DECLVALQ4, ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVALQ6 BOOST_MOVE_DECLVALQ5, ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVALQ7 BOOST_MOVE_DECLVALQ6, ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVALQ8 BOOST_MOVE_DECLVALQ7, ::boost::move_detail::declval() +#define BOOST_MOVE_DECLVALQ9 BOOST_MOVE_DECLVALQ8, ::boost::move_detail::declval() + #ifdef BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG #define BOOST_MOVE_MREF(T) ::boost::move_detail::mref #define BOOST_MOVE_MFWD(N) ::boost::forward(this->m_p##N.get()) + #define BOOST_MOVE_MFWDQ(N) ::boost::forward(this->m_q##N.get()) #else #define BOOST_MOVE_MREF(T) BOOST_FWD_REF(T) #define BOOST_MOVE_MFWD(N) ::boost::forward(this->m_p##N) + #define BOOST_MOVE_MFWDQ(N) ::boost::forward(this->m_q##N) #endif #define BOOST_MOVE_MITFWD(N) *this->m_p##N #define BOOST_MOVE_MINC(N) ++this->m_p##N +#define BOOST_MOVE_MITFWDQ(N) *this->m_q##N +#define BOOST_MOVE_MINCQ(N) ++this->m_q##N + //BOOST_MOVE_MFWDN #define BOOST_MOVE_MFWD0 -#define BOOST_MOVE_MFWD1 BOOST_MOVE_MFWD(0) +#define BOOST_MOVE_MFWD1 BOOST_MOVE_MFWD(0) #define BOOST_MOVE_MFWD2 BOOST_MOVE_MFWD1, BOOST_MOVE_MFWD(1) #define BOOST_MOVE_MFWD3 BOOST_MOVE_MFWD2, BOOST_MOVE_MFWD(2) #define BOOST_MOVE_MFWD4 BOOST_MOVE_MFWD3, BOOST_MOVE_MFWD(3) @@ -145,9 +174,21 @@ namespace move_detail { #define BOOST_MOVE_MFWD8 BOOST_MOVE_MFWD7, BOOST_MOVE_MFWD(7) #define BOOST_MOVE_MFWD9 BOOST_MOVE_MFWD8, BOOST_MOVE_MFWD(8) +//BOOST_MOVE_MFWDN +#define BOOST_MOVE_MFWDQ0 +#define BOOST_MOVE_MFWDQ1 BOOST_MOVE_MFWDQ(0) +#define BOOST_MOVE_MFWDQ2 BOOST_MOVE_MFWDQ1, BOOST_MOVE_MFWDQ(1) +#define BOOST_MOVE_MFWDQ3 BOOST_MOVE_MFWDQ2, BOOST_MOVE_MFWDQ(2) +#define BOOST_MOVE_MFWDQ4 BOOST_MOVE_MFWDQ3, BOOST_MOVE_MFWDQ(3) +#define BOOST_MOVE_MFWDQ5 BOOST_MOVE_MFWDQ4, BOOST_MOVE_MFWDQ(4) +#define BOOST_MOVE_MFWDQ6 BOOST_MOVE_MFWDQ5, BOOST_MOVE_MFWDQ(5) +#define BOOST_MOVE_MFWDQ7 BOOST_MOVE_MFWDQ6, BOOST_MOVE_MFWDQ(6) +#define BOOST_MOVE_MFWDQ8 BOOST_MOVE_MFWDQ7, BOOST_MOVE_MFWDQ(7) +#define BOOST_MOVE_MFWDQ9 BOOST_MOVE_MFWDQ8, BOOST_MOVE_MFWDQ(8) + //BOOST_MOVE_MINCN #define BOOST_MOVE_MINC0 -#define BOOST_MOVE_MINC1 BOOST_MOVE_MINC(0) +#define BOOST_MOVE_MINC1 BOOST_MOVE_MINC(0) #define BOOST_MOVE_MINC2 BOOST_MOVE_MINC1, BOOST_MOVE_MINC(1) #define BOOST_MOVE_MINC3 BOOST_MOVE_MINC2, BOOST_MOVE_MINC(2) #define BOOST_MOVE_MINC4 BOOST_MOVE_MINC3, BOOST_MOVE_MINC(3) @@ -157,9 +198,21 @@ namespace move_detail { #define BOOST_MOVE_MINC8 BOOST_MOVE_MINC7, BOOST_MOVE_MINC(7) #define BOOST_MOVE_MINC9 BOOST_MOVE_MINC8, BOOST_MOVE_MINC(8) +//BOOST_MOVE_MINCQN +#define BOOST_MOVE_MINCQ0 +#define BOOST_MOVE_MINCQ1 BOOST_MOVE_MINCQ(0) +#define BOOST_MOVE_MINCQ2 BOOST_MOVE_MINCQ1, BOOST_MOVE_MINCQ(1) +#define BOOST_MOVE_MINCQ3 BOOST_MOVE_MINCQ2, BOOST_MOVE_MINCQ(2) +#define BOOST_MOVE_MINCQ4 BOOST_MOVE_MINCQ3, BOOST_MOVE_MINCQ(3) +#define BOOST_MOVE_MINCQ5 BOOST_MOVE_MINCQ4, BOOST_MOVE_MINCQ(4) +#define BOOST_MOVE_MINCQ6 BOOST_MOVE_MINCQ5, BOOST_MOVE_MINCQ(5) +#define BOOST_MOVE_MINCQ7 BOOST_MOVE_MINCQ6, BOOST_MOVE_MINCQ(6) +#define BOOST_MOVE_MINCQ8 BOOST_MOVE_MINCQ7, BOOST_MOVE_MINCQ(7) +#define BOOST_MOVE_MINCQ9 BOOST_MOVE_MINCQ8, BOOST_MOVE_MINCQ(8) + //BOOST_MOVE_MITFWDN #define BOOST_MOVE_MITFWD0 -#define BOOST_MOVE_MITFWD1 BOOST_MOVE_MITFWD(0) +#define BOOST_MOVE_MITFWD1 BOOST_MOVE_MITFWD(0) #define BOOST_MOVE_MITFWD2 BOOST_MOVE_MITFWD1, BOOST_MOVE_MITFWD(1) #define BOOST_MOVE_MITFWD3 BOOST_MOVE_MITFWD2, BOOST_MOVE_MITFWD(2) #define BOOST_MOVE_MITFWD4 BOOST_MOVE_MITFWD3, BOOST_MOVE_MITFWD(3) @@ -169,10 +222,21 @@ namespace move_detail { #define BOOST_MOVE_MITFWD8 BOOST_MOVE_MITFWD7, BOOST_MOVE_MITFWD(7) #define BOOST_MOVE_MITFWD9 BOOST_MOVE_MITFWD8, BOOST_MOVE_MITFWD(8) +//BOOST_MOVE_MITFWDQN +#define BOOST_MOVE_MITFWDQ0 +#define BOOST_MOVE_MITFWDQ1 BOOST_MOVE_MITFWDQ(0) +#define BOOST_MOVE_MITFWDQ2 BOOST_MOVE_MITFWDQ1, BOOST_MOVE_MITFWDQ(1) +#define BOOST_MOVE_MITFWDQ3 BOOST_MOVE_MITFWDQ2, BOOST_MOVE_MITFWDQ(2) +#define BOOST_MOVE_MITFWDQ4 BOOST_MOVE_MITFWDQ3, BOOST_MOVE_MITFWDQ(3) +#define BOOST_MOVE_MITFWDQ5 BOOST_MOVE_MITFWDQ4, BOOST_MOVE_MITFWDQ(4) +#define BOOST_MOVE_MITFWDQ6 BOOST_MOVE_MITFWDQ5, BOOST_MOVE_MITFWDQ(5) +#define BOOST_MOVE_MITFWDQ7 BOOST_MOVE_MITFWDQ6, BOOST_MOVE_MITFWDQ(6) +#define BOOST_MOVE_MITFWDQ8 BOOST_MOVE_MITFWDQ7, BOOST_MOVE_MITFWDQ(7) +#define BOOST_MOVE_MITFWDQ9 BOOST_MOVE_MITFWDQ8, BOOST_MOVE_MITFWDQ(8) //BOOST_MOVE_FWD_INITN #define BOOST_MOVE_FWD_INIT0 -#define BOOST_MOVE_FWD_INIT1 m_p0(::boost::forward(p0)) +#define BOOST_MOVE_FWD_INIT1 m_p0(::boost::forward(p0)) #define BOOST_MOVE_FWD_INIT2 BOOST_MOVE_FWD_INIT1, m_p1(::boost::forward(p1)) #define BOOST_MOVE_FWD_INIT3 BOOST_MOVE_FWD_INIT2, m_p2(::boost::forward(p2)) #define BOOST_MOVE_FWD_INIT4 BOOST_MOVE_FWD_INIT3, m_p3(::boost::forward(p3)) @@ -182,9 +246,21 @@ namespace move_detail { #define BOOST_MOVE_FWD_INIT8 BOOST_MOVE_FWD_INIT7, m_p7(::boost::forward(p7)) #define BOOST_MOVE_FWD_INIT9 BOOST_MOVE_FWD_INIT8, m_p8(::boost::forward(p8)) +//BOOST_MOVE_FWD_INITQN +#define BOOST_MOVE_FWD_INITQ0 +#define BOOST_MOVE_FWD_INITQ1 m_q0(::boost::forward(q0)) +#define BOOST_MOVE_FWD_INITQ2 BOOST_MOVE_FWD_INITQ1, m_q1(::boost::forward(q1)) +#define BOOST_MOVE_FWD_INITQ3 BOOST_MOVE_FWD_INITQ2, m_q2(::boost::forward(q2)) +#define BOOST_MOVE_FWD_INITQ4 BOOST_MOVE_FWD_INITQ3, m_q3(::boost::forward(q3)) +#define BOOST_MOVE_FWD_INITQ5 BOOST_MOVE_FWD_INITQ4, m_q4(::boost::forward(q4)) +#define BOOST_MOVE_FWD_INITQ6 BOOST_MOVE_FWD_INITQ5, m_q5(::boost::forward(q5)) +#define BOOST_MOVE_FWD_INITQ7 BOOST_MOVE_FWD_INITQ6, m_q6(::boost::forward(q6)) +#define BOOST_MOVE_FWD_INITQ8 BOOST_MOVE_FWD_INITQ7, m_q7(::boost::forward(q7)) +#define BOOST_MOVE_FWD_INITQ9 BOOST_MOVE_FWD_INITQ8, m_q8(::boost::forward(q8)) + //BOOST_MOVE_VAL_INITN #define BOOST_MOVE_VAL_INIT0 -#define BOOST_MOVE_VAL_INIT1 m_p0(p0) +#define BOOST_MOVE_VAL_INIT1 m_p0(p0) #define BOOST_MOVE_VAL_INIT2 BOOST_MOVE_VAL_INIT1, m_p1(p1) #define BOOST_MOVE_VAL_INIT3 BOOST_MOVE_VAL_INIT2, m_p2(p2) #define BOOST_MOVE_VAL_INIT4 BOOST_MOVE_VAL_INIT3, m_p3(p3) @@ -194,9 +270,21 @@ namespace move_detail { #define BOOST_MOVE_VAL_INIT8 BOOST_MOVE_VAL_INIT7, m_p7(p7) #define BOOST_MOVE_VAL_INIT9 BOOST_MOVE_VAL_INIT8, m_p8(p8) +//BOOST_MOVE_VAL_INITQN +#define BOOST_MOVE_VAL_INITQ0 +#define BOOST_MOVE_VAL_INITQ1 m_q0(q0) +#define BOOST_MOVE_VAL_INITQ2 BOOST_MOVE_VAL_INITQ1, m_q1(q1) +#define BOOST_MOVE_VAL_INITQ3 BOOST_MOVE_VAL_INITQ2, m_q2(q2) +#define BOOST_MOVE_VAL_INITQ4 BOOST_MOVE_VAL_INITQ3, m_q3(q3) +#define BOOST_MOVE_VAL_INITQ5 BOOST_MOVE_VAL_INITQ4, m_q4(q4) +#define BOOST_MOVE_VAL_INITQ6 BOOST_MOVE_VAL_INITQ5, m_q5(q5) +#define BOOST_MOVE_VAL_INITQ7 BOOST_MOVE_VAL_INITQ6, m_q6(q6) +#define BOOST_MOVE_VAL_INITQ8 BOOST_MOVE_VAL_INITQ7, m_q7(q7) +#define BOOST_MOVE_VAL_INITQ9 BOOST_MOVE_VAL_INITQ8, m_q8(q8) + //BOOST_MOVE_UREFN #define BOOST_MOVE_UREF0 -#define BOOST_MOVE_UREF1 BOOST_FWD_REF(P0) p0 +#define BOOST_MOVE_UREF1 BOOST_FWD_REF(P0) p0 #define BOOST_MOVE_UREF2 BOOST_MOVE_UREF1, BOOST_FWD_REF(P1) p1 #define BOOST_MOVE_UREF3 BOOST_MOVE_UREF2, BOOST_FWD_REF(P2) p2 #define BOOST_MOVE_UREF4 BOOST_MOVE_UREF3, BOOST_FWD_REF(P3) p3 @@ -206,21 +294,9 @@ namespace move_detail { #define BOOST_MOVE_UREF8 BOOST_MOVE_UREF7, BOOST_FWD_REF(P7) p7 #define BOOST_MOVE_UREF9 BOOST_MOVE_UREF8, BOOST_FWD_REF(P8) p8 -//BOOST_MOVE_VALN -#define BOOST_MOVE_VAL0 -#define BOOST_MOVE_VAL1 P0 p0 -#define BOOST_MOVE_VAL2 BOOST_MOVE_VAL1, BOOST_FWD_REF(P1) p1 -#define BOOST_MOVE_VAL3 BOOST_MOVE_VAL2, BOOST_FWD_REF(P2) p2 -#define BOOST_MOVE_VAL4 BOOST_MOVE_VAL3, BOOST_FWD_REF(P3) p3 -#define BOOST_MOVE_VAL5 BOOST_MOVE_VAL4, BOOST_FWD_REF(P4) p4 -#define BOOST_MOVE_VAL6 BOOST_MOVE_VAL5, BOOST_FWD_REF(P5) p5 -#define BOOST_MOVE_VAL7 BOOST_MOVE_VAL6, BOOST_FWD_REF(P6) p6 -#define BOOST_MOVE_VAL8 BOOST_MOVE_VAL7, BOOST_FWD_REF(P7) p7 -#define BOOST_MOVE_VAL9 BOOST_MOVE_VAL8, BOOST_FWD_REF(P8) p8 - //BOOST_MOVE_UREFQN #define BOOST_MOVE_UREFQ0 -#define BOOST_MOVE_UREFQ1 BOOST_FWD_REF(Q0) q0 +#define BOOST_MOVE_UREFQ1 BOOST_FWD_REF(Q0) q0 #define BOOST_MOVE_UREFQ2 BOOST_MOVE_UREFQ1, BOOST_FWD_REF(Q1) q1 #define BOOST_MOVE_UREFQ3 BOOST_MOVE_UREFQ2, BOOST_FWD_REF(Q2) q2 #define BOOST_MOVE_UREFQ4 BOOST_MOVE_UREFQ3, BOOST_FWD_REF(Q3) q3 @@ -230,10 +306,35 @@ namespace move_detail { #define BOOST_MOVE_UREFQ8 BOOST_MOVE_UREFQ7, BOOST_FWD_REF(Q7) q7 #define BOOST_MOVE_UREFQ9 BOOST_MOVE_UREFQ8, BOOST_FWD_REF(Q8) q8 -//BOOST_MOVE_CREFN +//BOOST_MOVE_VALN +#define BOOST_MOVE_VAL0 +#define BOOST_MOVE_VAL1 BOOST_FWD_REF(P0) p0 +#define BOOST_MOVE_VAL2 BOOST_MOVE_VAL1, BOOST_FWD_REF(P1) p1 +#define BOOST_MOVE_VAL3 BOOST_MOVE_VAL2, BOOST_FWD_REF(P2) p2 +#define BOOST_MOVE_VAL4 BOOST_MOVE_VAL3, BOOST_FWD_REF(P3) p3 +#define BOOST_MOVE_VAL5 BOOST_MOVE_VAL4, BOOST_FWD_REF(P4) p4 +#define BOOST_MOVE_VAL6 BOOST_MOVE_VAL5, BOOST_FWD_REF(P5) p5 +#define BOOST_MOVE_VAL7 BOOST_MOVE_VAL6, BOOST_FWD_REF(P6) p6 +#define BOOST_MOVE_VAL8 BOOST_MOVE_VAL7, BOOST_FWD_REF(P7) p7 +#define BOOST_MOVE_VAL9 BOOST_MOVE_VAL8, BOOST_FWD_REF(P8) p8 + +//BOOST_MOVE_VALQN +#define BOOST_MOVE_VALQ0 +#define BOOST_MOVE_VALQ1 BOOST_FWD_REF(Q0) q0 +#define BOOST_MOVE_VALQ2 BOOST_MOVE_VALQ1, BOOST_FWD_REF(Q1) q1 +#define BOOST_MOVE_VALQ3 BOOST_MOVE_VALQ2, BOOST_FWD_REF(Q2) q2 +#define BOOST_MOVE_VALQ4 BOOST_MOVE_VALQ3, BOOST_FWD_REF(Q3) q3 +#define BOOST_MOVE_VALQ5 BOOST_MOVE_VALQ4, BOOST_FWD_REF(Q4) q4 +#define BOOST_MOVE_VALQ6 BOOST_MOVE_VALQ5, BOOST_FWD_REF(Q5) q5 +#define BOOST_MOVE_VALQ7 BOOST_MOVE_VALQ6, BOOST_FWD_REF(Q6) q6 +#define BOOST_MOVE_VALQ8 BOOST_MOVE_VALQ7, BOOST_FWD_REF(Q7) q7 +#define BOOST_MOVE_VALQ9 BOOST_MOVE_VALQ8, BOOST_FWD_REF(Q8) q8 + + #define BOOST_MOVE_UNVOIDCREF(T) const typename boost::move_detail::unvoid::type& +//BOOST_MOVE_CREFN #define BOOST_MOVE_CREF0 -#define BOOST_MOVE_CREF1 BOOST_MOVE_UNVOIDCREF(P0) p0 +#define BOOST_MOVE_CREF1 BOOST_MOVE_UNVOIDCREF(P0) p0 #define BOOST_MOVE_CREF2 BOOST_MOVE_CREF1, BOOST_MOVE_UNVOIDCREF(P1) p1 #define BOOST_MOVE_CREF3 BOOST_MOVE_CREF2, BOOST_MOVE_UNVOIDCREF(P2) p2 #define BOOST_MOVE_CREF4 BOOST_MOVE_CREF3, BOOST_MOVE_UNVOIDCREF(P3) p3 @@ -243,9 +344,21 @@ namespace move_detail { #define BOOST_MOVE_CREF8 BOOST_MOVE_CREF7, BOOST_MOVE_UNVOIDCREF(P7) p7 #define BOOST_MOVE_CREF9 BOOST_MOVE_CREF8, BOOST_MOVE_UNVOIDCREF(P8) p8 +//BOOST_MOVE_CREFQN +#define BOOST_MOVE_CREFQ0 +#define BOOST_MOVE_CREFQ1 BOOST_MOVE_UNVOIDCREF(Q0) q0 +#define BOOST_MOVE_CREFQ2 BOOST_MOVE_CREFQ1, BOOST_MOVE_UNVOIDCREF(Q1) q1 +#define BOOST_MOVE_CREFQ3 BOOST_MOVE_CREFQ2, BOOST_MOVE_UNVOIDCREF(Q2) q2 +#define BOOST_MOVE_CREFQ4 BOOST_MOVE_CREFQ3, BOOST_MOVE_UNVOIDCREF(Q3) q3 +#define BOOST_MOVE_CREFQ5 BOOST_MOVE_CREFQ4, BOOST_MOVE_UNVOIDCREF(Q4) q4 +#define BOOST_MOVE_CREFQ6 BOOST_MOVE_CREFQ5, BOOST_MOVE_UNVOIDCREF(Q5) q5 +#define BOOST_MOVE_CREFQ7 BOOST_MOVE_CREFQ6, BOOST_MOVE_UNVOIDCREF(Q6) q6 +#define BOOST_MOVE_CREFQ8 BOOST_MOVE_CREFQ7, BOOST_MOVE_UNVOIDCREF(Q7) q7 +#define BOOST_MOVE_CREFQ9 BOOST_MOVE_CREFQ8, BOOST_MOVE_UNVOIDCREF(Q8) q8 + //BOOST_MOVE_CLASSN #define BOOST_MOVE_CLASS0 -#define BOOST_MOVE_CLASS1 class P0 +#define BOOST_MOVE_CLASS1 class P0 #define BOOST_MOVE_CLASS2 BOOST_MOVE_CLASS1, class P1 #define BOOST_MOVE_CLASS3 BOOST_MOVE_CLASS2, class P2 #define BOOST_MOVE_CLASS4 BOOST_MOVE_CLASS3, class P3 @@ -257,7 +370,7 @@ namespace move_detail { //BOOST_MOVE_CLASSQN #define BOOST_MOVE_CLASSQ0 -#define BOOST_MOVE_CLASSQ1 class Q0 +#define BOOST_MOVE_CLASSQ1 class Q0 #define BOOST_MOVE_CLASSQ2 BOOST_MOVE_CLASSQ1, class Q1 #define BOOST_MOVE_CLASSQ3 BOOST_MOVE_CLASSQ2, class Q2 #define BOOST_MOVE_CLASSQ4 BOOST_MOVE_CLASSQ3, class Q3 @@ -269,7 +382,7 @@ namespace move_detail { //BOOST_MOVE_CLASSDFLTN #define BOOST_MOVE_CLASSDFLT0 -#define BOOST_MOVE_CLASSDFLT1 class P0 = void +#define BOOST_MOVE_CLASSDFLT1 class P0 = void #define BOOST_MOVE_CLASSDFLT2 BOOST_MOVE_CLASSDFLT1, class P1 = void #define BOOST_MOVE_CLASSDFLT3 BOOST_MOVE_CLASSDFLT2, class P2 = void #define BOOST_MOVE_CLASSDFLT4 BOOST_MOVE_CLASSDFLT3, class P3 = void @@ -279,9 +392,21 @@ namespace move_detail { #define BOOST_MOVE_CLASSDFLT8 BOOST_MOVE_CLASSDFLT7, class P7 = void #define BOOST_MOVE_CLASSDFLT9 BOOST_MOVE_CLASSDFLT8, class P8 = void +//BOOST_MOVE_CLASSDFLTQN +#define BOOST_MOVE_CLASSDFLTQ0 +#define BOOST_MOVE_CLASSDFLTQ1 class Q0 = void +#define BOOST_MOVE_CLASSDFLTQ2 BOOST_MOVE_CLASSDFLTQ1, class Q1 = void +#define BOOST_MOVE_CLASSDFLTQ3 BOOST_MOVE_CLASSDFLTQ2, class Q2 = void +#define BOOST_MOVE_CLASSDFLTQ4 BOOST_MOVE_CLASSDFLTQ3, class Q3 = void +#define BOOST_MOVE_CLASSDFLTQ5 BOOST_MOVE_CLASSDFLTQ4, class Q4 = void +#define BOOST_MOVE_CLASSDFLTQ6 BOOST_MOVE_CLASSDFLTQ5, class Q5 = void +#define BOOST_MOVE_CLASSDFLTQ7 BOOST_MOVE_CLASSDFLTQ6, class Q6 = void +#define BOOST_MOVE_CLASSDFLTQ8 BOOST_MOVE_CLASSDFLTQ7, class Q7 = void +#define BOOST_MOVE_CLASSDFLTQ9 BOOST_MOVE_CLASSDFLTQ8, class Q8 = void + //BOOST_MOVE_TARGN #define BOOST_MOVE_TARG0 -#define BOOST_MOVE_TARG1 P0 +#define BOOST_MOVE_TARG1 P0 #define BOOST_MOVE_TARG2 BOOST_MOVE_TARG1, P1 #define BOOST_MOVE_TARG3 BOOST_MOVE_TARG2, P2 #define BOOST_MOVE_TARG4 BOOST_MOVE_TARG3, P3 @@ -291,9 +416,21 @@ namespace move_detail { #define BOOST_MOVE_TARG8 BOOST_MOVE_TARG7, P7 #define BOOST_MOVE_TARG9 BOOST_MOVE_TARG8, P8 +//BOOST_MOVE_TARGQN +#define BOOST_MOVE_TARGQ0 +#define BOOST_MOVE_TARGQ1 Q0 +#define BOOST_MOVE_TARGQ2 BOOST_MOVE_TARGQ1, Q1 +#define BOOST_MOVE_TARGQ3 BOOST_MOVE_TARGQ2, Q2 +#define BOOST_MOVE_TARGQ4 BOOST_MOVE_TARGQ3, Q3 +#define BOOST_MOVE_TARGQ5 BOOST_MOVE_TARGQ4, Q4 +#define BOOST_MOVE_TARGQ6 BOOST_MOVE_TARGQ5, Q5 +#define BOOST_MOVE_TARGQ7 BOOST_MOVE_TARGQ6, Q6 +#define BOOST_MOVE_TARGQ8 BOOST_MOVE_TARGQ7, Q7 +#define BOOST_MOVE_TARGQ9 BOOST_MOVE_TARGQ8, Q8 + //BOOST_MOVE_FWD_TN #define BOOST_MOVE_FWD_T0 -#define BOOST_MOVE_FWD_T1 typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_T1 typename ::boost::move_detail::forward_type::type #define BOOST_MOVE_FWD_T2 BOOST_MOVE_FWD_T1, typename ::boost::move_detail::forward_type::type #define BOOST_MOVE_FWD_T3 BOOST_MOVE_FWD_T2, typename ::boost::move_detail::forward_type::type #define BOOST_MOVE_FWD_T4 BOOST_MOVE_FWD_T3, typename ::boost::move_detail::forward_type::type @@ -303,9 +440,21 @@ namespace move_detail { #define BOOST_MOVE_FWD_T8 BOOST_MOVE_FWD_T7, typename ::boost::move_detail::forward_type::type #define BOOST_MOVE_FWD_T9 BOOST_MOVE_FWD_T8, typename ::boost::move_detail::forward_type::type +//BOOST_MOVE_FWD_TQN +#define BOOST_MOVE_FWD_TQ0 +#define BOOST_MOVE_FWD_TQ1 typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_TQ2 BOOST_MOVE_FWD_TQ1, typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_TQ3 BOOST_MOVE_FWD_TQ2, typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_TQ4 BOOST_MOVE_FWD_TQ3, typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_TQ5 BOOST_MOVE_FWD_TQ4, typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_TQ6 BOOST_MOVE_FWD_TQ5, typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_TQ7 BOOST_MOVE_FWD_TQ6, typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_TQ8 BOOST_MOVE_FWD_TQ7, typename ::boost::move_detail::forward_type::type +#define BOOST_MOVE_FWD_TQ9 BOOST_MOVE_FWD_TQ8, typename ::boost::move_detail::forward_type::type + //BOOST_MOVE_MREFX #define BOOST_MOVE_MREF0 -#define BOOST_MOVE_MREF1 BOOST_MOVE_MREF(P0) m_p0; +#define BOOST_MOVE_MREF1 BOOST_MOVE_MREF(P0) m_p0; #define BOOST_MOVE_MREF2 BOOST_MOVE_MREF1 BOOST_MOVE_MREF(P1) m_p1; #define BOOST_MOVE_MREF3 BOOST_MOVE_MREF2 BOOST_MOVE_MREF(P2) m_p2; #define BOOST_MOVE_MREF4 BOOST_MOVE_MREF3 BOOST_MOVE_MREF(P3) m_p3; @@ -315,9 +464,21 @@ namespace move_detail { #define BOOST_MOVE_MREF8 BOOST_MOVE_MREF7 BOOST_MOVE_MREF(P7) m_p7; #define BOOST_MOVE_MREF9 BOOST_MOVE_MREF8 BOOST_MOVE_MREF(P8) m_p8; +//BOOST_MOVE_MREFQX +#define BOOST_MOVE_MREFQ0 +#define BOOST_MOVE_MREFQ1 BOOST_MOVE_MREFQ(Q0) m_q0; +#define BOOST_MOVE_MREFQ2 BOOST_MOVE_MREFQ1 BOOST_MOVE_MREFQ(Q1) m_q1; +#define BOOST_MOVE_MREFQ3 BOOST_MOVE_MREFQ2 BOOST_MOVE_MREFQ(Q2) m_q2; +#define BOOST_MOVE_MREFQ4 BOOST_MOVE_MREFQ3 BOOST_MOVE_MREFQ(Q3) m_q3; +#define BOOST_MOVE_MREFQ5 BOOST_MOVE_MREFQ4 BOOST_MOVE_MREFQ(Q4) m_q4; +#define BOOST_MOVE_MREFQ6 BOOST_MOVE_MREFQ5 BOOST_MOVE_MREFQ(Q5) m_q5; +#define BOOST_MOVE_MREFQ7 BOOST_MOVE_MREFQ6 BOOST_MOVE_MREFQ(Q6) m_q6; +#define BOOST_MOVE_MREFQ8 BOOST_MOVE_MREFQ7 BOOST_MOVE_MREFQ(Q7) m_q7; +#define BOOST_MOVE_MREFQ9 BOOST_MOVE_MREFQ8 BOOST_MOVE_MREFQ(Q8) m_q8; + //BOOST_MOVE_MEMBX #define BOOST_MOVE_MEMB0 -#define BOOST_MOVE_MEMB1 P0 m_p0; +#define BOOST_MOVE_MEMB1 P0 m_p0; #define BOOST_MOVE_MEMB2 BOOST_MOVE_MEMB1 P1 m_p1; #define BOOST_MOVE_MEMB3 BOOST_MOVE_MEMB2 P2 m_p2; #define BOOST_MOVE_MEMB4 BOOST_MOVE_MEMB3 P3 m_p3; @@ -327,6 +488,18 @@ namespace move_detail { #define BOOST_MOVE_MEMB8 BOOST_MOVE_MEMB7 P7 m_p7; #define BOOST_MOVE_MEMB9 BOOST_MOVE_MEMB8 P8 m_p8; +//BOOST_MOVE_MEMBQX +#define BOOST_MOVE_MEMBQ0 +#define BOOST_MOVE_MEMBQ1 Q0 m_q0; +#define BOOST_MOVE_MEMBQ2 BOOST_MOVE_MEMBQ1 Q1 m_q1; +#define BOOST_MOVE_MEMBQ3 BOOST_MOVE_MEMBQ2 Q2 m_q2; +#define BOOST_MOVE_MEMBQ4 BOOST_MOVE_MEMBQ3 Q3 m_q3; +#define BOOST_MOVE_MEMBQ5 BOOST_MOVE_MEMBQ4 Q4 m_q4; +#define BOOST_MOVE_MEMBQ6 BOOST_MOVE_MEMBQ5 Q5 m_q5; +#define BOOST_MOVE_MEMBQ7 BOOST_MOVE_MEMBQ6 Q6 m_q6; +#define BOOST_MOVE_MEMBQ8 BOOST_MOVE_MEMBQ7 Q7 m_q7; +#define BOOST_MOVE_MEMBQ9 BOOST_MOVE_MEMBQ8 Q8 m_q8; + //BOOST_MOVE_TMPL_LTN #define BOOST_MOVE_TMPL_LT0 #define BOOST_MOVE_TMPL_LT1 template< @@ -412,7 +585,7 @@ namespace move_detail { #define BOOST_MOVE_COLON9 BOOST_MOVE_COLON1 //BOOST_MOVE_ITERATE_2TON -#define BOOST_MOVE_ITERATE_2TO2(MACROFUNC) MACROFUNC(2) +#define BOOST_MOVE_ITERATE_2TO2(MACROFUNC) MACROFUNC(2) #define BOOST_MOVE_ITERATE_2TO3(MACROFUNC) BOOST_MOVE_ITERATE_2TO2(MACROFUNC) MACROFUNC(3) #define BOOST_MOVE_ITERATE_2TO4(MACROFUNC) BOOST_MOVE_ITERATE_2TO3(MACROFUNC) MACROFUNC(4) #define BOOST_MOVE_ITERATE_2TO5(MACROFUNC) BOOST_MOVE_ITERATE_2TO4(MACROFUNC) MACROFUNC(5) @@ -422,7 +595,7 @@ namespace move_detail { #define BOOST_MOVE_ITERATE_2TO9(MACROFUNC) BOOST_MOVE_ITERATE_2TO8(MACROFUNC) MACROFUNC(9) //BOOST_MOVE_ITERATE_1TON -#define BOOST_MOVE_ITERATE_1TO1(MACROFUNC) MACROFUNC(1) +#define BOOST_MOVE_ITERATE_1TO1(MACROFUNC) MACROFUNC(1) #define BOOST_MOVE_ITERATE_1TO2(MACROFUNC) BOOST_MOVE_ITERATE_1TO1(MACROFUNC) MACROFUNC(2) #define BOOST_MOVE_ITERATE_1TO3(MACROFUNC) BOOST_MOVE_ITERATE_1TO2(MACROFUNC) MACROFUNC(3) #define BOOST_MOVE_ITERATE_1TO4(MACROFUNC) BOOST_MOVE_ITERATE_1TO3(MACROFUNC) MACROFUNC(4) @@ -433,7 +606,7 @@ namespace move_detail { #define BOOST_MOVE_ITERATE_1TO9(MACROFUNC) BOOST_MOVE_ITERATE_1TO8(MACROFUNC) MACROFUNC(9) //BOOST_MOVE_ITERATE_0TON -#define BOOST_MOVE_ITERATE_0TO0(MACROFUNC) MACROFUNC(0) +#define BOOST_MOVE_ITERATE_0TO0(MACROFUNC) MACROFUNC(0) #define BOOST_MOVE_ITERATE_0TO1(MACROFUNC) BOOST_MOVE_ITERATE_0TO0(MACROFUNC) MACROFUNC(1) #define BOOST_MOVE_ITERATE_0TO2(MACROFUNC) BOOST_MOVE_ITERATE_0TO1(MACROFUNC) MACROFUNC(2) #define BOOST_MOVE_ITERATE_0TO3(MACROFUNC) BOOST_MOVE_ITERATE_0TO2(MACROFUNC) MACROFUNC(3) @@ -456,6 +629,29 @@ namespace move_detail { #define BOOST_MOVE_ITERATE_8TO8(MACROFUNC) MACROFUNC(8) #define BOOST_MOVE_ITERATE_9TO9(MACROFUNC) MACROFUNC(9) +//BOOST_MOVE_ITER2D_0TO9 +#define BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M) MACROFUNC2D(M, 0) +#define BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M) MACROFUNC2D(M, 1) +#define BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M) MACROFUNC2D(M, 2) +#define BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M) MACROFUNC2D(M, 3) +#define BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M) MACROFUNC2D(M, 4) +#define BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M) MACROFUNC2D(M, 5) +#define BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M) MACROFUNC2D(M, 6) +#define BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M) MACROFUNC2D(M, 7) +#define BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M) MACROFUNC2D(M, 8) +#define BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, M) BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M) MACROFUNC2D(M, 9) +// +#define BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 0) +#define BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 1) +#define BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 2) +#define BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 3) +#define BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 4) +#define BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 5) +#define BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 6) +#define BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 7) +#define BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 8) +#define BOOST_MOVE_ITER2D_0TO9(MACROFUNC2D) BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D) BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 9) + //BOOST_MOVE_CAT #define BOOST_MOVE_CAT(a, b) BOOST_MOVE_CAT_I(a, b) #define BOOST_MOVE_CAT_I(a, b) a ## b From 6e42a16dd6d747abc95c44fba17cff5e18ce0137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Tue, 8 Sep 2015 23:19:54 +0200 Subject: [PATCH 2/7] Add missing std:: namespace to size_t types. --- include/boost/move/detail/type_traits.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/boost/move/detail/type_traits.hpp b/include/boost/move/detail/type_traits.hpp index ab79fb1..816fdca 100644 --- a/include/boost/move/detail/type_traits.hpp +++ b/include/boost/move/detail/type_traits.hpp @@ -480,7 +480,7 @@ template struct remove_all_extents { typedef typename remove_all_extents::type type; }; -template +template struct remove_all_extents { typedef typename remove_all_extents::type type;}; @@ -1003,7 +1003,7 @@ BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x1000) #else //BOOST_NO_ALIGNMENT -template +template union aligned_union { T aligner; From 9efcc3ba7ad0d3194b532073ef4023309fb4dab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Tue, 8 Sep 2015 23:26:46 +0200 Subject: [PATCH 3/7] Update changelog with Trac #11615 --- doc/move.qbk | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/move.qbk b/doc/move.qbk index 38370bb..8182625 100644 --- a/doc/move.qbk +++ b/doc/move.qbk @@ -762,6 +762,13 @@ Many thanks to all boosters that have tested, reviewed and improved the library. [section:release_notes Release Notes] +[section:release_notes_boost_1_60 Boost 1.60 Release] + +* Fixed bug: + * [@https://svn.boost.org/trac/boost/ticket/11615 Trac #11615: ['"Boost.Move should use the qualified name for std::size_t in type_traits.hpp"]], + +[endsect] + [section:release_notes_boost_1_59 Boost 1.59 Release] * Changed `unique_ptr`'s converting constructor taking the source by value in C++03 compilers to allow simple conversions From c7295862bce93a50cef5414eacceb0cf3e7fa78e Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Thu, 10 Sep 2015 21:03:52 -0700 Subject: [PATCH 4/7] Remove mentions of deprecated macros in documentation --- test/adl_move_swap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/adl_move_swap.cpp b/test/adl_move_swap.cpp index 9aeae43..200c6cb 100644 --- a/test/adl_move_swap.cpp +++ b/test/adl_move_swap.cpp @@ -91,7 +91,7 @@ int main() movable x, y; swap_stats::reset_stats(); ::boost::adl_move_swap(x, y); - #if defined(BOOST_NO_RVALUE_REFERENCES) + #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) //In non rvalue reference compilers, //movable classes with no swap() member uses //boost::move() to implement swap. @@ -117,7 +117,7 @@ int main() movable_swap_member x, y; swap_stats::reset_stats(); ::boost::adl_move_swap(x, y); - #if defined(BOOST_NO_RVALUE_REFERENCES) + #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) //In non rvalue reference compilers, //movable classes with no swap() member uses //boost::move() to implement swap. From bd9532a6a4291476f6a4f209f030d8789f2e7a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sun, 13 Sep 2015 21:50:34 +0200 Subject: [PATCH 5/7] Documentation fixes: - core.hpp: hide non-public macros - default_delete.hpp: Hide detail code - unique_ptr.hpp: Likewise - utility_core.hpp: Document move_if_not_lvalue_reference --- include/boost/move/core.hpp | 4 ++++ include/boost/move/default_delete.hpp | 6 ++++++ include/boost/move/unique_ptr.hpp | 4 +++- include/boost/move/utility_core.hpp | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/boost/move/core.hpp b/include/boost/move/core.hpp index 55486e6..54aece0 100644 --- a/include/boost/move/core.hpp +++ b/include/boost/move/core.hpp @@ -27,6 +27,8 @@ #include #include +// @cond + //boost_move_no_copy_constructor_or_assign typedef //used to detect noncopyable types for other Boost libraries. #if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES) @@ -49,6 +51,8 @@ // #endif //BOOST_NO_CXX11_DELETED_FUNCTIONS +// @endcond + #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) #include diff --git a/include/boost/move/default_delete.hpp b/include/boost/move/default_delete.hpp index afe1b1b..1c26ed9 100644 --- a/include/boost/move/default_delete.hpp +++ b/include/boost/move/default_delete.hpp @@ -31,6 +31,7 @@ //! Describes the default deleter (destruction policy) of unique_ptr: default_delete. namespace boost{ +// @cond namespace move_upd { namespace bmupmu = ::boost::move_upmu; @@ -96,6 +97,7 @@ typedef int bool_conversion::* explicit_bool_arg; #endif } //namespace move_upd { +// @endcond namespace movelib { @@ -123,7 +125,11 @@ struct default_delete #endif #if defined(BOOST_MOVE_DOXYGEN_INVOKED) + //! Trivial copy constructor + //! default_delete(const default_delete&) BOOST_NOEXCEPT = default; + //! Trivial assignment + //! default_delete &operator=(const default_delete&) BOOST_NOEXCEPT = default; #else typedef typename bmupmu::remove_extent::type element_type; diff --git a/include/boost/move/unique_ptr.hpp b/include/boost/move/unique_ptr.hpp index bcf4fae..5b06743 100644 --- a/include/boost/move/unique_ptr.hpp +++ b/include/boost/move/unique_ptr.hpp @@ -38,7 +38,7 @@ //! specially in C++03 compilers: //! - operator < uses pointer operator < instead of std::less. //! This avoids dependencies on std::common_type and std::less -//! (/ headers. In C++03 this avoid pulling Boost.Typeof and other +//! (/ headers). In C++03 this avoid pulling Boost.Typeof and other //! cascading dependencies. As in all Boost platforms operator < on raw pointers and //! other smart pointers provides strict weak ordering in practice this should not be a problem for users. //! - assignable from literal 0 for compilers without nullptr @@ -46,6 +46,7 @@ //! cv-less T and cv-less U are the same type and T is more CV qualified than U. namespace boost{ +// @cond namespace move_upd { //////////////////////////////////////////// @@ -301,6 +302,7 @@ struct enable_up_moveconv_constr {}; } //namespace move_upd { +// @endcond namespace movelib { diff --git a/include/boost/move/utility_core.hpp b/include/boost/move/utility_core.hpp index 89e4f07..7fd1ea1 100644 --- a/include/boost/move/utility_core.hpp +++ b/include/boost/move/utility_core.hpp @@ -265,6 +265,8 @@ #if defined(BOOST_MOVE_DOXYGEN_INVOKED) + //! Effects: Calls `boost::move` if `input_reference` is not a lvalue reference. + //! Otherwise returns the reference template output_reference move_if_not_lvalue_reference(input_reference) noexcept; #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) From 172d49cf5464be290282e12df927571ac3a8ec66 Mon Sep 17 00:00:00 2001 From: Dmitry Sobinov Date: Mon, 14 Sep 2015 23:01:58 +1000 Subject: [PATCH 6/7] Fixed build errors with gcc and LLVM libc++ --- include/boost/move/detail/iterator_traits.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/boost/move/detail/iterator_traits.hpp b/include/boost/move/detail/iterator_traits.hpp index 2c5dc3e..d84c4f5 100644 --- a/include/boost/move/detail/iterator_traits.hpp +++ b/include/boost/move/detail/iterator_traits.hpp @@ -24,10 +24,13 @@ #include -#if defined(__clang__) && defined(_LIBCPP_VERSION) +#if defined(__clang__) #define BOOST_MOVE_CLANG_INLINE_STD_NS #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++11-extensions" +#endif + +#ifdef _LIBCPP_VERSION #define BOOST_MOVE_STD_NS_BEG _LIBCPP_BEGIN_NAMESPACE_STD #define BOOST_MOVE_STD_NS_END _LIBCPP_END_NAMESPACE_STD #else From 09c75813a6409ce77122235587d30ebebf2b21a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Mon, 14 Sep 2015 22:33:20 +0200 Subject: [PATCH 7/7] Refactor std namespace deduction for forward declarations --- include/boost/move/detail/iterator_traits.hpp | 21 ++----------- include/boost/move/detail/std_ns_begin.hpp | 30 +++++++++++++++++++ include/boost/move/detail/std_ns_end.hpp | 14 +++++++++ proj/vc7ide/Move.sln | 1 + 4 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 include/boost/move/detail/std_ns_begin.hpp create mode 100644 include/boost/move/detail/std_ns_end.hpp diff --git a/include/boost/move/detail/iterator_traits.hpp b/include/boost/move/detail/iterator_traits.hpp index d84c4f5..a75ee03 100644 --- a/include/boost/move/detail/iterator_traits.hpp +++ b/include/boost/move/detail/iterator_traits.hpp @@ -24,20 +24,7 @@ #include -#if defined(__clang__) - #define BOOST_MOVE_CLANG_INLINE_STD_NS - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wc++11-extensions" -#endif - -#ifdef _LIBCPP_VERSION - #define BOOST_MOVE_STD_NS_BEG _LIBCPP_BEGIN_NAMESPACE_STD - #define BOOST_MOVE_STD_NS_END _LIBCPP_END_NAMESPACE_STD -#else - #define BOOST_MOVE_STD_NS_BEG namespace std{ - #define BOOST_MOVE_STD_NS_END } -#endif - +#include BOOST_MOVE_STD_NS_BEG struct input_iterator_tag; @@ -47,11 +34,7 @@ struct random_access_iterator_tag; struct output_iterator_tag; BOOST_MOVE_STD_NS_END - -#ifdef BOOST_MOVE_CLANG_INLINE_STD_NS - #pragma GCC diagnostic pop - #undef BOOST_MOVE_CLANG_INLINE_STD_NS -#endif //BOOST_MOVE_CLANG_INLINE_STD_NS +#include namespace boost{ namespace movelib{ diff --git a/include/boost/move/detail/std_ns_begin.hpp b/include/boost/move/detail/std_ns_begin.hpp new file mode 100644 index 0000000..a768e61 --- /dev/null +++ b/include/boost/move/detail/std_ns_begin.hpp @@ -0,0 +1,30 @@ +#////////////////////////////////////////////////////////////////////////////// +#// +#// (C) Copyright Ion Gaztanaga 2015-2015. +#// Distributed under the Boost Software License, Version 1.0. +#// (See accompanying file LICENSE_1_0.txt or copy at +#// http://www.boost.org/LICENSE_1_0.txt) +#// +#// See http://www.boost.org/libs/move for documentation. +#// +#////////////////////////////////////////////////////////////////////////////// +# +#if defined(_LIBCPP_VERSION) + #if defined(__clang__) + #define BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wc++11-extensions" + #endif + #define BOOST_MOVE_STD_NS_BEG _LIBCPP_BEGIN_NAMESPACE_STD + #define BOOST_MOVE_STD_NS_END _LIBCPP_END_NAMESPACE_STD +#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE_VERSION) //GCC >= 4.6 + #define BOOST_MOVE_STD_NS_BEG namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION + #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE_VERSION } // namespace +#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE) //GCC >= 4.2 + #define BOOST_MOVE_STD_NS_BEG _GLIBCXX_BEGIN_NAMESPACE(std) + #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE +#else + #define BOOST_MOVE_STD_NS_BEG namespace std{ + #define BOOST_MOVE_STD_NS_END } +#endif + diff --git a/include/boost/move/detail/std_ns_end.hpp b/include/boost/move/detail/std_ns_end.hpp new file mode 100644 index 0000000..0975059 --- /dev/null +++ b/include/boost/move/detail/std_ns_end.hpp @@ -0,0 +1,14 @@ +#////////////////////////////////////////////////////////////////////////////// +#// +#// (C) Copyright Ion Gaztanaga 2015-2015. +#// Distributed under the Boost Software License, Version 1.0. +#// (See accompanying file LICENSE_1_0.txt or copy at +#// http://www.boost.org/LICENSE_1_0.txt) +#// +#// See http://www.boost.org/libs/move for documentation. +#// +#////////////////////////////////////////////////////////////////////////////// +#ifdef BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH + #pragma GCC diagnostic pop + #undef BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH +#endif //BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH diff --git a/proj/vc7ide/Move.sln b/proj/vc7ide/Move.sln index 06e5cc9..a38b5f8 100644 --- a/proj/vc7ide/Move.sln +++ b/proj/vc7ide/Move.sln @@ -249,6 +249,7 @@ Global ..\..\..\..\boost\move\move.hpp = ..\..\..\..\boost\move\move.hpp ..\..\doc\move.qbk = ..\..\doc\move.qbk ..\..\..\..\boost\move\detail\move_helpers.hpp = ..\..\..\..\boost\move\detail\move_helpers.hpp + ..\..\..\..\boost\move\detail\std_ns_begin.hpp = ..\..\..\..\boost\move\detail\std_ns_begin.hpp ..\..\..\..\boost\move\traits.hpp = ..\..\..\..\boost\move\traits.hpp ..\..\..\..\boost\move\detail\type_traits.hpp = ..\..\..\..\boost\move\detail\type_traits.hpp ..\..\..\..\boost\move\unique_ptr.hpp = ..\..\..\..\boost\move\unique_ptr.hpp