Merge pull request #38 from ldionne/develop

Fix compilation error with as_deque in C++11.
This commit is contained in:
Joel de Guzman
2014-11-13 07:12:55 +08:00
3 changed files with 77 additions and 8 deletions

View File

@ -83,23 +83,29 @@ namespace boost { namespace fusion
deque()
{}
template <typename ...Elements>
template <typename Head_, typename ...Tail_, typename =
typename enable_if<is_convertible<Head_, Head> >::type
>
BOOST_FUSION_GPU_ENABLED
deque(deque<Elements...> const& seq)
deque(deque<Head_, Tail_...> const& seq)
: base(seq)
{}
template <typename ...Elements>
template <typename Head_, typename ...Tail_, typename =
typename enable_if<is_convertible<Head_, Head> >::type
>
BOOST_FUSION_GPU_ENABLED
deque(deque<Elements...>& seq)
deque(deque<Head_, Tail_...>& seq)
: base(seq)
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename ...Elements>
template <typename Head_, typename ...Tail_, typename =
typename enable_if<is_convertible<Head_, Head> >::type
>
BOOST_FUSION_GPU_ENABLED
deque(deque<Elements...>&& seq)
: base(std::forward<deque<Elements...>>(seq))
deque(deque<Head_, Tail_...>&& seq)
: base(std::forward<deque<Head_, Tail_...>>(seq))
{}
#endif
@ -127,7 +133,9 @@ namespace boost { namespace fusion
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Head_, typename ...Tail_>
template <typename Head_, typename ...Tail_, typename =
typename enable_if<is_convertible<Head_, Head> >::type
>
BOOST_FUSION_GPU_ENABLED
explicit deque(Head_&& head, Tail_&&... tail)
: base(detail::deque_keyed_values<Head, Tail...>

View File

@ -55,6 +55,7 @@ project
[ run algorithm/zip_ignore.cpp : : : : ]
[ run algorithm/flatten.cpp : : : : ]
[ run sequence/as_deque.cpp : : : : ]
[ run sequence/as_list.cpp : : : : ]
[ run sequence/as_map.cpp : : : : ]
[ run sequence/as_set.cpp : : : : ]

View File

@ -0,0 +1,60 @@
/*=============================================================================
Copyright (c) 2014 Louis Dionne
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#include <boost/detail/lightweight_test.hpp>
#include <boost/fusion/algorithm/transformation/push_back.hpp>
#include <boost/fusion/algorithm/transformation/push_front.hpp>
#include <boost/fusion/container/deque/convert.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/container/generation/make_deque.hpp>
#include <boost/fusion/container/generation/make_list.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
#include <boost/fusion/sequence/comparison/equal_to.hpp>
#include <string>
int main() {
using namespace boost::fusion;
using namespace boost;
BOOST_TEST(as_deque(make_vector()) == make_deque());
BOOST_TEST(as_deque(make_vector(1)) == make_deque(1));
BOOST_TEST(as_deque(make_vector(1, '2')) == make_deque(1, '2'));
BOOST_TEST(as_deque(make_vector(1, '2', 3.3f)) == make_deque(1, '2', 3.3f));
BOOST_TEST(as_deque(make_list()) == make_deque());
BOOST_TEST(as_deque(make_list(1)) == make_deque(1));
BOOST_TEST(as_deque(make_list(1, '2')) == make_deque(1, '2'));
BOOST_TEST(as_deque(make_list(1, '2', 3.3f)) == make_deque(1, '2', 3.3f));
{
deque<> xs;
BOOST_TEST(as_deque(push_back(xs, 1)) == make_deque(1));
}
{
deque<int> xs(1);
BOOST_TEST(as_deque(push_back(xs, '2')) == make_deque(1, '2'));
}
{
deque<int, char> xs(1, '2');
BOOST_TEST(as_deque(push_back(xs, 3.3f)) == make_deque(1, '2', 3.3f));
}
{
deque<> xs;
BOOST_TEST(
as_deque(push_front(xs, make_deque(1, '2', 3.3f))) ==
make_deque(make_deque(1, '2', 3.3f))
);
BOOST_TEST(as_deque(make_deque(make_deque(1))) == make_deque(make_deque(1)));
}
return boost::report_errors();
}