mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-29 20:17:32 +02:00
deque move-ctor OK on gcc
[SVN r80334]
This commit is contained in:
@ -71,6 +71,11 @@ namespace boost { namespace fusion
|
||||
: base(seq)
|
||||
{}
|
||||
|
||||
template <typename ...Elements>
|
||||
deque(deque<Elements...>& seq)
|
||||
: base(seq)
|
||||
{}
|
||||
|
||||
#if !defined(BOOST_NO_RVALUE_REFERENCES)
|
||||
template <typename ...Elements>
|
||||
deque(deque<Elements...>&& seq)
|
||||
@ -89,16 +94,21 @@ namespace boost { namespace fusion
|
||||
#endif
|
||||
|
||||
explicit deque(Head const& head, Tail const&... tail)
|
||||
: base(detail::deque_keyed_values<Head, Tail...>::call(head, tail...))
|
||||
: base(detail::deque_keyed_values<Head, Tail...>::construct(head, tail...))
|
||||
{}
|
||||
|
||||
//~ #if !defined(BOOST_NO_RVALUE_REFERENCES)
|
||||
//~ template <typename Head_, typename ...Tail_>
|
||||
//~ explicit deque(Head_&& head, Tail_&&... tail)
|
||||
//~ : base(detail::deque_keyed_values<Head_, Tail_...>
|
||||
//~ ::call(std::forward<Head_>(head), std::forward<Tail_>(tail)...))
|
||||
//~ {}
|
||||
//~ #endif
|
||||
template <typename Head_, typename ...Tail_>
|
||||
explicit deque(Head_ const& head, Tail_ const&... tail)
|
||||
: base(detail::deque_keyed_values<Head_, Tail_...>::construct(head, tail...))
|
||||
{}
|
||||
|
||||
#if !defined(BOOST_NO_RVALUE_REFERENCES)
|
||||
template <typename Head_, typename ...Tail_>
|
||||
explicit deque(Head_&& head, Tail_&&... tail)
|
||||
: base(detail::deque_keyed_values<Head, Tail...>
|
||||
::forward_(std::forward<Head_>(head), std::forward<Tail_>(tail)...))
|
||||
{}
|
||||
#endif
|
||||
|
||||
template <typename Sequence>
|
||||
explicit deque(Sequence const& seq
|
||||
|
@ -28,13 +28,22 @@ namespace boost { namespace fusion { namespace detail
|
||||
typedef typename deque_keyed_values_impl<next_index, Tail...>::type tail;
|
||||
typedef keyed_element<N, Head, tail> type;
|
||||
|
||||
static type call(
|
||||
static type construct(
|
||||
typename detail::call_param<Head>::type head
|
||||
, typename detail::call_param<Tail>::type... tail)
|
||||
{
|
||||
return type(
|
||||
head
|
||||
, deque_keyed_values_impl<next_index, Tail...>::call(tail...)
|
||||
, deque_keyed_values_impl<next_index, Tail...>::construct(tail...)
|
||||
);
|
||||
}
|
||||
|
||||
static type forward_(Head&& head, Tail&&... tail)
|
||||
{
|
||||
return type(
|
||||
std::forward<Head>(head)
|
||||
, deque_keyed_values_impl<next_index, Tail...>::
|
||||
forward_(std::forward<Tail>(tail)...)
|
||||
);
|
||||
}
|
||||
};
|
||||
@ -45,7 +54,8 @@ namespace boost { namespace fusion { namespace detail
|
||||
struct deque_keyed_values_impl<N>
|
||||
{
|
||||
typedef nil_keyed_element type;
|
||||
static type call() { return type(); }
|
||||
static type construct() { return type(); }
|
||||
static type forward_() { return type(); }
|
||||
};
|
||||
|
||||
template <typename ...Elements>
|
||||
|
@ -63,6 +63,9 @@ namespace boost { namespace fusion { namespace detail
|
||||
: Rest(rhs.get_base()), value_(rhs.value_)
|
||||
{}
|
||||
|
||||
#if !defined(BOOST_NO_RVALUE_REFERENCES)
|
||||
#endif
|
||||
|
||||
Rest& get_base()
|
||||
{
|
||||
return *this;
|
||||
|
Reference in New Issue
Block a user