diff --git a/include/boost/fusion/sequence/container/deque/deque.hpp b/include/boost/fusion/sequence/container/deque/deque.hpp index ababdd4c..884899f8 100644 --- a/include/boost/fusion/sequence/container/deque/deque.hpp +++ b/include/boost/fusion/sequence/container/deque/deque.hpp @@ -20,20 +20,23 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include +#include +#include namespace boost { namespace fusion { struct deque_tag; - struct void_; template struct deque @@ -63,6 +66,11 @@ namespace boost { namespace fusion { : base(seq) {} + template + deque(Sequence const& seq, typename disable_if >::type* dummy = 0) + : base(base::from_iterator(fusion::begin(seq))) + {} + template deque& operator=(deque const& rhs) diff --git a/include/boost/fusion/sequence/container/deque/detail/keyed_element.hpp b/include/boost/fusion/sequence/container/deque/detail/keyed_element.hpp index 4f032d6f..177f68ac 100644 --- a/include/boost/fusion/sequence/container/deque/detail/keyed_element.hpp +++ b/include/boost/fusion/sequence/container/deque/detail/keyed_element.hpp @@ -11,6 +11,9 @@ #include #include +#include +#include + namespace boost { namespace fusion { struct fusion_sequence_tag; @@ -21,6 +24,13 @@ namespace detail { { typedef fusion_sequence_tag tag; void get(); + + template + static nil_keyed_element + from_iterator(It const&) + { + return nil_keyed_element(); + } }; template @@ -31,6 +41,14 @@ namespace detail { typedef fusion_sequence_tag tag; using Rest::get; + template + static keyed_element + from_iterator(It const& it) + { + return keyed_element( + *it, base::from_iterator(fusion::next(it))); + } + template keyed_element(keyed_element const& rhs) : Rest(rhs.get_base()), value_(rhs.value_) diff --git a/include/boost/fusion/sequence/container/vector/vector10.hpp b/include/boost/fusion/sequence/container/vector/vector10.hpp index fa96ee56..6ff80a0c 100644 --- a/include/boost/fusion/sequence/container/vector/vector10.hpp +++ b/include/boost/fusion/sequence/container/vector/vector10.hpp @@ -47,6 +47,12 @@ namespace boost { namespace fusion typedef mpl::false_ is_view; typedef random_access_traversal_tag category; typedef mpl::int_<0> size; + + vector0() {} + + template + vector0(Sequence const& seq) + {} }; // expand vector1 to vector10 diff --git a/include/boost/fusion/support/void.hpp b/include/boost/fusion/support/void.hpp new file mode 100644 index 00000000..63275b11 --- /dev/null +++ b/include/boost/fusion/support/void.hpp @@ -0,0 +1,8 @@ +#if !defined(BOOST_FUSION_SUPPORT_VOID_20070706_2125) +#define BOOST_FUSION_SUPPORT_VOID_20070706_2125 + +namespace boost { namespace fusion { + struct void_ {}; +}} + +#endif