pinkbyte 15/07/27 16:35:22
Added:
boost-1.58.0-fix-non-constexpr-types-regression.patch
Log:
Revision bump: backport upstream patch, that fixes regression in
Boost.Fusion, drop python 3.3 support. Drop old revision
(Portage version: 2.2.20/cvs/Linux x86_64, signed Manifest commit with key
0x60C0742D1F357D42)
Revision Changes Path
1.1
dev-libs/boost/files/boost-1.58.0-fix-non-constexpr-types-regression.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-libs/boost/files/boost-1.58.0-fix-non-constexpr-types-regression.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-libs/boost/files/boost-1.58.0-fix-non-constexpr-types-regression.patch?rev=1.1&content-type=text/plain
Index: boost-1.58.0-fix-non-constexpr-types-regression.patch
===================================================================
diff --git a/boost/fusion/adapted/struct/detail/define_struct.hpp
b/boost/fusion/adapted/struct/detail/define_struct.hpp
index 2554292..ce3737e 100644
--- a/boost/fusion/adapted/struct/detail/define_struct.hpp
+++ b/boost/fusion/adapted/struct/detail/define_struct.hpp
@@ -69,7 +69,7 @@
ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
\
\
template<typename Seq>
\
- BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
self_type&
\
operator=(Seq const& seq)
\
{
\
@@ -128,7 +128,7 @@
ATTRIBUTE_TUPEL_SIZE,
\
ATTRIBUTES_SEQ)
\
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
NAME()
\
: BOOST_PP_SEQ_FOR_EACH_I_R(
\
1,
\
@@ -137,7 +137,7 @@
ATTRIBUTES_SEQ)
\
{}
\
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
NAME(self_type const& other_self)
\
: BOOST_PP_SEQ_FOR_EACH_I_R(
\
1,
\
@@ -147,7 +147,7 @@
{}
\
\
template<typename Seq>
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
NAME(Seq const& seq
\
BOOST_PP_IF(
\
BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)),
\
@@ -167,7 +167,7 @@
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_1(
\
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
\
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
explicit
\
NAME(boost::call_traits<
\
BOOST_PP_TUPLE_ELEM(
\
@@ -180,7 +180,7 @@
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1(
\
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
\
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
explicit
\
NAME(typename boost::call_traits<
\
typename boost::fusion::detail::get_first_arg<
\
@@ -217,7 +217,7 @@
#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N(
\
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
\
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
NAME(BOOST_PP_SEQ_FOR_EACH_I_R(
\
1,
\
BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I,
\
@@ -245,7 +245,7 @@
#define BOOST_FUSION_DEFINE_STRUCT_CTOR_N(
\
NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
\
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED \
NAME(BOOST_PP_SEQ_FOR_EACH_I_R(
\
1,
\
BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I,
\
diff --git a/boost/fusion/adapted/struct/detail/define_struct_inline.hpp
b/boost/fusion/adapted/struct/detail/define_struct_inline.hpp
index a5a3ae0..a037ffe 100644
--- a/boost/fusion/adapted/struct/detail/define_struct_inline.hpp
+++ b/boost/fusion/adapted/struct/detail/define_struct_inline.hpp
@@ -66,7 +66,7 @@
#define BOOST_FUSION_IGNORE_2(ARG1, ARG2)
#define BOOST_FUSION_MAKE_COPY_CONSTRUCTOR(NAME, ATTRIBUTES_SEQ)
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
NAME(BOOST_PP_SEQ_FOR_EACH_I(
\
BOOST_FUSION_MAKE_CONST_REF_PARAM,
\
~,
\
@@ -337,7 +337,7 @@
typedef boost::mpl::int_<N> index;
\
typedef boost_fusion_detail_Seq sequence_type;
\
\
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
\
+ BOOST_FUSION_GPU_ENABLED
\
BOOST_FUSION_ITERATOR_NAME(NAME)(boost_fusion_detail_Seq& seq)
\
: seq_(seq)
\
BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES(
\
diff --git a/libs/fusion/test/sequence/adapt_struct.cpp
b/libs/fusion/test/sequence/adapt_struct.cpp
index c0cd304..121827f 100644
--- a/libs/fusion/test/sequence/adapt_struct.cpp
+++ b/libs/fusion/test/sequence/adapt_struct.cpp
@@ -67,6 +67,17 @@ namespace ns
foo foo_;
int y;
};
+
+
+ // Testing non-constexpr compatible types
+ struct employee {
+ std::string name;
+ std::string nickname;
+
+ employee(std::string name, std::string nickname)
+ : name(name), nickname(nickname)
+ {}
+ };
}
#if BOOST_PP_VARIADICS
@@ -96,6 +107,13 @@ namespace ns
y
)
+ BOOST_FUSION_ADAPT_STRUCT(
+ ns::employee,
+ name,
+ nickname
+ )
+
+
#else // BOOST_PP_VARIADICS
BOOST_FUSION_ADAPT_STRUCT(
@@ -123,6 +141,12 @@ namespace ns
(BOOST_FUSION_ADAPT_AUTO, y)
)
+ BOOST_FUSION_ADAPT_STRUCT(
+ ns::employee,
+ (std::string, name)
+ (BOOST_FUSION_ADAPT_AUTO, nickname)
+ )
+
#endif
int
@@ -224,6 +248,15 @@ main()
BOOST_TEST(v2 >= v1);
}
+ {
+ ns::employee emp("John Doe", "jdoe");
+ std::cout << at_c<0>(emp) << std::endl;
+ std::cout << at_c<1>(emp) << std::endl;
+
+ fusion::vector<std::string, std::string> v1("John Doe", "jdoe");
+ BOOST_TEST(emp == v1);
+ }
+
return boost::report_errors();
}
diff --git a/libs/fusion/test/sequence/define_struct.cpp
b/libs/fusion/test/sequence/define_struct.cpp
index 795fdf6..63b5a19 100644
--- a/libs/fusion/test/sequence/define_struct.cpp
+++ b/libs/fusion/test/sequence/define_struct.cpp
@@ -26,6 +26,14 @@ BOOST_FUSION_DEFINE_STRUCT(
BOOST_FUSION_DEFINE_STRUCT(BOOST_PP_EMPTY(), s, (int, m))
+// Testing non-constexpr compatible types
+BOOST_FUSION_DEFINE_STRUCT(
+ (ns),
+ employee,
+ (std::string, name)
+ (std::string, nickname)
+)
+
int
main()
{
@@ -100,6 +108,14 @@ main()
BOOST_TEST(p == make_vector(3,5));
}
+ {
+ ns::employee emp = make_list("John Doe", "jdoe");
+ std::cout << at_c<0>(emp) << std::endl;
+ std::cout << at_c<1>(emp) << std::endl;
+
+ BOOST_TEST(emp == make_vector("John Doe", "jdoe"));
+ }
+
return boost::report_errors();
}
diff --git a/libs/fusion/test/sequence/define_struct_inline.cpp
b/libs/fusion/test/sequence/define_struct_inline.cpp
index e849ce9..d34a142 100644
--- a/libs/fusion/test/sequence/define_struct_inline.cpp
+++ b/libs/fusion/test/sequence/define_struct_inline.cpp
@@ -41,6 +41,13 @@ namespace ns
BOOST_FUSION_DEFINE_STRUCT_INLINE(s, (int, m))
BOOST_FUSION_DEFINE_STRUCT_INLINE(empty_struct, )
+
+ // Testing non-constexpr compatible types
+ BOOST_FUSION_DEFINE_STRUCT_INLINE(
+ employee,
+ (std::string, name)
+ (std::string, nickname)
+ )
}
template <typename Point>
@@ -128,6 +135,17 @@ main()
{
run_test<cls::point>(); // test with non-template enclosing class
run_test<tpl_cls<>::point>(); // test with template enclosing class
+
+ {
+ using namespace boost::fusion;
+
+ ns::employee emp = make_list("John Doe", "jdoe");
+ std::cout << at_c<0>(emp) << std::endl;
+ std::cout << at_c<1>(emp) << std::endl;
+
+ BOOST_TEST(emp == make_vector("John Doe", "jdoe"));
+ }
+
return boost::report_errors();
}