From f872d1326a3bb63da5f4b505fb8403c6610c8f10 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Sun, 11 Jan 2015 01:15:52 +0900 Subject: [PATCH] The ctor should check which is seqence or not. --- include/boost/fusion/container/list/cons.hpp | 15 ++++++++++++--- include/boost/fusion/container/list/list.hpp | 11 +++++++---- include/boost/fusion/container/set/set.hpp | 5 ++++- .../fusion/container/vector/detail/vector_n.hpp | 2 ++ include/boost/fusion/container/vector/vector.hpp | 5 ++++- .../boost/fusion/container/vector/vector10.hpp | 1 + .../boost/fusion/container/vector/vector20.hpp | 1 + .../boost/fusion/container/vector/vector30.hpp | 1 + .../boost/fusion/container/vector/vector40.hpp | 1 + .../boost/fusion/container/vector/vector50.hpp | 1 + 10 files changed, 34 insertions(+), 9 deletions(-) diff --git a/include/boost/fusion/container/list/cons.hpp b/include/boost/fusion/container/list/cons.hpp index 2654e8fb..575e4d9e 100644 --- a/include/boost/fusion/container/list/cons.hpp +++ b/include/boost/fusion/container/list/cons.hpp @@ -25,8 +25,11 @@ #include #include #include +#include #include #include +#include +#include namespace boost { namespace fusion { @@ -73,8 +76,10 @@ namespace boost { namespace fusion BOOST_FUSION_GPU_ENABLED cons( Sequence const& seq - , typename boost::disable_if< - is_convertible // use copy to car instead + , typename boost::enable_if< + mpl::and_< + traits::is_sequence + , mpl::not_ > > // use copy to car instead >::type* /*dummy*/ = 0 ) : car(*fusion::begin(seq)) @@ -105,7 +110,11 @@ namespace boost { namespace fusion template BOOST_FUSION_GPU_ENABLED - typename boost::disable_if, cons&>::type + typename boost::enable_if< + mpl::and_< + traits::is_sequence + , mpl::not_ > > + , cons&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type Iterator; diff --git a/include/boost/fusion/container/list/list.hpp b/include/boost/fusion/container/list/list.hpp index 3b638315..7f71856d 100644 --- a/include/boost/fusion/container/list/list.hpp +++ b/include/boost/fusion/container/list/list.hpp @@ -10,6 +10,8 @@ #include #include #include +#include +#include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include @@ -59,7 +61,8 @@ namespace boost { namespace fusion template BOOST_FUSION_GPU_ENABLED - list(Sequence const& rhs) + list(Sequence const& rhs + , typename boost::enable_if >::type* = 0) : inherited_type(rhs) {} // Expand a couple of forwarding constructors for arguments @@ -80,10 +83,10 @@ namespace boost { namespace fusion return *this; } - template + template BOOST_FUSION_GPU_ENABLED - list& - operator=(T const& rhs) + typename boost::enable_if, list&>::type + operator=(Sequence const& rhs) { inherited_type::operator=(rhs); return *this; diff --git a/include/boost/fusion/container/set/set.hpp b/include/boost/fusion/container/set/set.hpp index e1d019a7..3d7bdfce 100644 --- a/include/boost/fusion/container/set/set.hpp +++ b/include/boost/fusion/container/set/set.hpp @@ -8,6 +8,7 @@ #define FUSION_SET_09162005_1104 #include +#include #include #include #include @@ -22,6 +23,7 @@ #include #include #include +#include #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) #include @@ -69,7 +71,8 @@ namespace boost { namespace fusion template BOOST_FUSION_GPU_ENABLED - set(Sequence const& rhs) + set(Sequence const& rhs + , typename boost::enable_if >::type* = 0) : data(rhs) {} #include diff --git a/include/boost/fusion/container/vector/detail/vector_n.hpp b/include/boost/fusion/container/vector/detail/vector_n.hpp index 2196e7f2..b7a910aa 100644 --- a/include/boost/fusion/container/vector/detail/vector_n.hpp +++ b/include/boost/fusion/container/vector/detail/vector_n.hpp @@ -208,6 +208,7 @@ FUSION_HASH endif BOOST_FUSION_GPU_ENABLED BOOST_PP_CAT(vector, N)( Sequence const& seq + , typename boost::enable_if >::type* = 0 #if (N == 1) , typename boost::disable_if >::type* /*dummy*/ = 0 #endif @@ -218,6 +219,7 @@ FUSION_HASH endif BOOST_FUSION_GPU_ENABLED BOOST_PP_CAT(vector, N)( Sequence& seq + , typename boost::enable_if >::type* = 0 #if (N == 1) , typename boost::disable_if >::type* /*dummy*/ = 0 #endif diff --git a/include/boost/fusion/container/vector/vector.hpp b/include/boost/fusion/container/vector/vector.hpp index 2dd584b5..6728fa40 100644 --- a/include/boost/fusion/container/vector/vector.hpp +++ b/include/boost/fusion/container/vector/vector.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -20,6 +21,7 @@ #include #include #include +#include #define FUSION_HASH # @@ -115,7 +117,8 @@ namespace boost { namespace fusion template BOOST_FUSION_GPU_ENABLED - vector(Sequence const& rhs) + vector(Sequence const& rhs, + typename boost::enable_if >::type* = 0) : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} // Expand a couple of forwarding constructors for arguments diff --git a/include/boost/fusion/container/vector/vector10.hpp b/include/boost/fusion/container/vector/vector10.hpp index 4f9b18f5..2e24f028 100644 --- a/include/boost/fusion/container/vector/vector10.hpp +++ b/include/boost/fusion/container/vector/vector10.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include diff --git a/include/boost/fusion/container/vector/vector20.hpp b/include/boost/fusion/container/vector/vector20.hpp index 11df2420..61978dcb 100644 --- a/include/boost/fusion/container/vector/vector20.hpp +++ b/include/boost/fusion/container/vector/vector20.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/include/boost/fusion/container/vector/vector30.hpp b/include/boost/fusion/container/vector/vector30.hpp index de379a06..f034abd5 100644 --- a/include/boost/fusion/container/vector/vector30.hpp +++ b/include/boost/fusion/container/vector/vector30.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include diff --git a/include/boost/fusion/container/vector/vector40.hpp b/include/boost/fusion/container/vector/vector40.hpp index 2c6fd854..5a7bb44c 100644 --- a/include/boost/fusion/container/vector/vector40.hpp +++ b/include/boost/fusion/container/vector/vector40.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/include/boost/fusion/container/vector/vector50.hpp b/include/boost/fusion/container/vector/vector50.hpp index d2099665..2448d51e 100644 --- a/include/boost/fusion/container/vector/vector50.hpp +++ b/include/boost/fusion/container/vector/vector50.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include