deque fix for ambiguity and making ctors explicit

[SVN r78056]
This commit is contained in:
Joel de Guzman
2012-04-18 01:18:10 +00:00
parent b7eda8d0f4
commit c8224c8bdf

View File

@ -31,7 +31,9 @@ namespace boost { namespace fusion
struct deque_tag; struct deque_tag;
template <typename ...Elements> template <typename ...Elements>
struct deque; struct deque : detail::nil_keyed_element
{
};
template <typename Head, typename ...Tail> template <typename Head, typename ...Tail>
struct deque<Head, Tail...> struct deque<Head, Tail...>
@ -49,22 +51,18 @@ namespace boost { namespace fusion
deque() deque()
{} {}
explicit deque(typename add_reference<typename add_const<Head>::type>::type elem)
: base(elem, detail::nil_keyed_element())
{}
template <typename ...Elements> template <typename ...Elements>
deque(deque<Elements...> const& seq) deque(deque<Elements...> const& seq)
: base(seq) : base(seq)
{} {}
deque(typename add_reference<typename add_const<Head>::type>::type head explicit deque(typename add_reference<typename add_const<Head>::type>::type head
, typename add_reference<typename add_const<Tail>::type>::type... tail) , typename add_reference<typename add_const<Tail>::type>::type... tail)
: base(detail::deque_keyed_values<Head, Tail...>::call(head, tail...)) : base(detail::deque_keyed_values<Head, Tail...>::call(head, tail...))
{} {}
template <typename Sequence> template <typename Sequence>
deque(Sequence const& seq explicit deque(Sequence const& seq
, typename disable_if<is_convertible<Sequence, Head> >::type* /*dummy*/ = 0) , typename disable_if<is_convertible<Sequence, Head> >::type* /*dummy*/ = 0)
: base(base::from_iterator(fusion::begin(seq))) : base(base::from_iterator(fusion::begin(seq)))
{} {}