forked from boostorg/fusion
Fix compile error with ambiguous ctor, close #11766.
When a) first elem is sequence b) second (and third) elem is(are) void*, both of conversion ctor and forwarding ctor are candidate since SFINAE expression has void* type.
This commit is contained in:
@ -21,6 +21,7 @@
|
|||||||
// C++11 interface
|
// C++11 interface
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#include <boost/fusion/support/sequence_base.hpp>
|
#include <boost/fusion/support/sequence_base.hpp>
|
||||||
|
#include <boost/fusion/support/void.hpp>
|
||||||
#include <boost/fusion/support/detail/access.hpp>
|
#include <boost/fusion/support/detail/access.hpp>
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
|
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
|
||||||
@ -59,7 +60,7 @@ namespace boost { namespace fusion
|
|||||||
typename enable_if<
|
typename enable_if<
|
||||||
mpl::and_<
|
mpl::and_<
|
||||||
traits::is_sequence<Sequence>
|
traits::is_sequence<Sequence>
|
||||||
, result_of::empty<Sequence>>>::type* /*dummy*/ = 0) BOOST_NOEXCEPT
|
, result_of::empty<Sequence>>, void_>::type = void_()) BOOST_NOEXCEPT
|
||||||
{}
|
{}
|
||||||
|
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
@ -149,8 +150,8 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
explicit 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>, void_>::type = void_()
|
||||||
, typename enable_if<traits::is_sequence<Sequence> >::type* /*dummy*/ = 0)
|
, typename enable_if<traits::is_sequence<Sequence>, void_>::type = void_())
|
||||||
: base(base::from_iterator(fusion::begin(seq)))
|
: base(base::from_iterator(fusion::begin(seq)))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -102,8 +102,8 @@ namespace boost { namespace fusion {
|
|||||||
template<typename Sequence>
|
template<typename Sequence>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
deque(Sequence const& seq
|
deque(Sequence const& seq
|
||||||
, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0
|
, typename disable_if<is_convertible<Sequence, T0>, void_>::type = void_()
|
||||||
, typename enable_if<traits::is_sequence<Sequence> >::type* /*dummy*/ = 0)
|
, typename enable_if<traits::is_sequence<Sequence>, void_>::type = void_())
|
||||||
: base(base::from_iterator(fusion::begin(seq)))
|
: base(base::from_iterator(fusion::begin(seq)))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
|||||||
template <typename T0_>
|
template <typename T0_>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
explicit deque(T0_&& t0
|
explicit deque(T0_&& t0
|
||||||
, typename enable_if<is_convertible<T0_, T0> >::type* /*dummy*/ = 0
|
, typename enable_if<is_convertible<T0_, T0>, void_>::type = void_()
|
||||||
)
|
)
|
||||||
: base(BOOST_FUSION_FWD_ELEM(T0_, t0), detail::nil_keyed_element())
|
: base(BOOST_FUSION_FWD_ELEM(T0_, t0), detail::nil_keyed_element())
|
||||||
{}
|
{}
|
||||||
@ -146,7 +146,8 @@ FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
|||||||
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq
|
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq
|
||||||
, typename disable_if<
|
, typename disable_if<
|
||||||
is_convertible<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>, T0>
|
is_convertible<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>, T0>
|
||||||
>::type* /*dummy*/ = 0)
|
, void_
|
||||||
|
>::type = void_())
|
||||||
: base(std::forward<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>>(seq))
|
: base(std::forward<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>>(seq))
|
||||||
{}
|
{}
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -180,7 +181,7 @@ FUSION_HASH endif
|
|||||||
typename enable_if<
|
typename enable_if<
|
||||||
mpl::and_<
|
mpl::and_<
|
||||||
traits::is_sequence<Sequence>
|
traits::is_sequence<Sequence>
|
||||||
, result_of::empty<Sequence> > >::type* /*dummy*/ = 0) BOOST_NOEXCEPT
|
, result_of::empty<Sequence> >, void_>::type = void_()) BOOST_NOEXCEPT
|
||||||
{}
|
{}
|
||||||
|
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#define FUSION_CONS_07172005_0843
|
#define FUSION_CONS_07172005_0843
|
||||||
|
|
||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
|
#include <boost/fusion/support/void.hpp>
|
||||||
#include <boost/fusion/container/list/cons_fwd.hpp>
|
#include <boost/fusion/container/list/cons_fwd.hpp>
|
||||||
#include <boost/fusion/support/detail/access.hpp>
|
#include <boost/fusion/support/detail/access.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||||
@ -34,7 +35,6 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct void_;
|
|
||||||
struct cons_tag;
|
struct cons_tag;
|
||||||
struct forward_traversal_tag;
|
struct forward_traversal_tag;
|
||||||
struct fusion_sequence_tag;
|
struct fusion_sequence_tag;
|
||||||
@ -82,7 +82,8 @@ namespace boost { namespace fusion
|
|||||||
traits::is_sequence<Sequence>
|
traits::is_sequence<Sequence>
|
||||||
, mpl::not_<is_base_of<cons, Sequence> >
|
, mpl::not_<is_base_of<cons, Sequence> >
|
||||||
, mpl::not_<is_convertible<Sequence, Car> > > // use copy to car instead
|
, mpl::not_<is_convertible<Sequence, Car> > > // use copy to car instead
|
||||||
>::type* /*dummy*/ = 0
|
, void_
|
||||||
|
>::type = void_()
|
||||||
)
|
)
|
||||||
: car(*fusion::begin(seq))
|
: car(*fusion::begin(seq))
|
||||||
, cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {}
|
, cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define FUSION_LIST_07172005_1153
|
#define FUSION_LIST_07172005_1153
|
||||||
|
|
||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
|
#include <boost/fusion/support/void.hpp>
|
||||||
#include <boost/fusion/container/list/detail/cpp03/list_fwd.hpp>
|
#include <boost/fusion/container/list/detail/cpp03/list_fwd.hpp>
|
||||||
#include <boost/fusion/container/list/detail/cpp03/list_to_cons.hpp>
|
#include <boost/fusion/container/list/detail/cpp03/list_to_cons.hpp>
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
@ -61,7 +62,7 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
list(Sequence const& rhs
|
list(Sequence const& rhs
|
||||||
, typename boost::enable_if<traits::is_sequence<Sequence> >::type* = 0)
|
, typename boost::enable_if<traits::is_sequence<Sequence>, void_>::type = void_())
|
||||||
: inherited_type(rhs) {}
|
: inherited_type(rhs) {}
|
||||||
|
|
||||||
// Expand a couple of forwarding constructors for arguments
|
// Expand a couple of forwarding constructors for arguments
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
#include <boost/fusion/support/sequence_base.hpp>
|
#include <boost/fusion/support/sequence_base.hpp>
|
||||||
#include <boost/fusion/support/category_of.hpp>
|
#include <boost/fusion/support/category_of.hpp>
|
||||||
|
#include <boost/fusion/support/void.hpp>
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
@ -68,21 +69,21 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
map(Sequence const& seq
|
map(Sequence const& seq
|
||||||
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
, typename enable_if<traits::is_sequence<Sequence>, void_>::type = void_())
|
||||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
map(Sequence& seq
|
map(Sequence& seq
|
||||||
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
, typename enable_if<traits::is_sequence<Sequence>, void_>::type = void_())
|
||||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
map(Sequence&& seq
|
map(Sequence&& seq
|
||||||
, typename enable_if<traits::is_sequence<Sequence>>::type* /*dummy*/ = 0)
|
, typename enable_if<traits::is_sequence<Sequence>, void_>::type = void_())
|
||||||
: base_type(begin(seq), detail::map_impl_from_iterator())
|
: base_type(begin(seq), detail::map_impl_from_iterator())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define FUSION_SET_09162005_1104
|
#define FUSION_SET_09162005_1104
|
||||||
|
|
||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
|
#include <boost/fusion/support/void.hpp>
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
#include <boost/fusion/support/sequence_base.hpp>
|
#include <boost/fusion/support/sequence_base.hpp>
|
||||||
#include <boost/fusion/support/category_of.hpp>
|
#include <boost/fusion/support/category_of.hpp>
|
||||||
@ -47,7 +48,6 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct void_;
|
|
||||||
struct fusion_sequence_tag;
|
struct fusion_sequence_tag;
|
||||||
|
|
||||||
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_SET_SIZE, typename T)>
|
template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_SET_SIZE, typename T)>
|
||||||
@ -72,7 +72,7 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
set(Sequence const& rhs
|
set(Sequence const& rhs
|
||||||
, typename boost::enable_if<traits::is_sequence<Sequence> >::type* = 0)
|
, typename boost::enable_if<traits::is_sequence<Sequence>, void_>::type = void_())
|
||||||
: data(rhs) {}
|
: data(rhs) {}
|
||||||
|
|
||||||
#include <boost/fusion/container/set/detail/cpp03/set_forward_ctor.hpp>
|
#include <boost/fusion/container/set/detail/cpp03/set_forward_ctor.hpp>
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
// C++11 interface
|
// C++11 interface
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#include <boost/fusion/support/detail/access.hpp>
|
#include <boost/fusion/support/detail/access.hpp>
|
||||||
|
#include <boost/fusion/support/void.hpp>
|
||||||
#include <boost/fusion/support/sequence_base.hpp>
|
#include <boost/fusion/support/sequence_base.hpp>
|
||||||
#include <boost/fusion/support/category_of.hpp>
|
#include <boost/fusion/support/category_of.hpp>
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
@ -60,8 +61,8 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
set(Sequence const& rhs,
|
set(Sequence const& rhs,
|
||||||
typename enable_if<traits::is_sequence<Sequence> >::type* = 0,
|
typename enable_if<traits::is_sequence<Sequence>, void_>::type = void_(),
|
||||||
typename enable_if<detail::is_same_size<Sequence, storage_type> >::type* = 0)
|
typename enable_if<detail::is_same_size<Sequence, storage_type>, void_>::type = void_())
|
||||||
: data(rhs) {}
|
: data(rhs) {}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -102,8 +103,8 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
set(Sequence&& rhs,
|
set(Sequence&& rhs,
|
||||||
typename enable_if<traits::is_sequence<Sequence> >::type* = 0,
|
typename enable_if<traits::is_sequence<Sequence>, void_>::type = void_(),
|
||||||
typename enable_if<detail::is_same_size<Sequence, storage_type> >::type* = 0)
|
typename enable_if<detail::is_same_size<Sequence, storage_type>, void_>::type = void_())
|
||||||
: data(std::forward<Sequence>(rhs)) {}
|
: data(std::forward<Sequence>(rhs)) {}
|
||||||
|
|
||||||
template <typename ...U>
|
template <typename ...U>
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||||
#include <boost/fusion/support/config.hpp>
|
#include <boost/fusion/support/config.hpp>
|
||||||
|
#include <boost/fusion/support/void.hpp>
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
#include <boost/fusion/container/vector/vector_fwd.hpp>
|
#include <boost/fusion/container/vector/vector_fwd.hpp>
|
||||||
#include <boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp>
|
#include <boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp>
|
||||||
@ -118,7 +119,7 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
BOOST_FUSION_GPU_ENABLED
|
BOOST_FUSION_GPU_ENABLED
|
||||||
vector(Sequence const& rhs,
|
vector(Sequence const& rhs,
|
||||||
typename boost::enable_if<traits::is_sequence<Sequence> >::type* = 0)
|
typename boost::enable_if<traits::is_sequence<Sequence>, void_>::type = void_())
|
||||||
: vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
|
: vec(BOOST_FUSION_VECTOR_COPY_INIT()) {}
|
||||||
|
|
||||||
// Expand a couple of forwarding constructors for arguments
|
// Expand a couple of forwarding constructors for arguments
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#include <boost/fusion/support/sequence_base.hpp>
|
#include <boost/fusion/support/sequence_base.hpp>
|
||||||
#include <boost/fusion/support/is_sequence.hpp>
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/fusion/support/void.hpp>
|
||||||
#include <boost/fusion/support/detail/index_sequence.hpp>
|
#include <boost/fusion/support/detail/index_sequence.hpp>
|
||||||
#include <boost/fusion/container/vector/detail/at_impl.hpp>
|
#include <boost/fusion/container/vector/detail/at_impl.hpp>
|
||||||
#include <boost/fusion/container/vector/detail/value_at_impl.hpp>
|
#include <boost/fusion/container/vector/detail/value_at_impl.hpp>
|
||||||
@ -164,7 +165,7 @@ namespace boost { namespace fusion
|
|||||||
template <typename U>
|
template <typename U>
|
||||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||||
store(U&& rhs
|
store(U&& rhs
|
||||||
, typename disable_if<is_same<typename pure<U>::type, store> >::type* = 0)
|
, typename disable_if<is_same<typename pure<U>::type, store>, void_>::type = void_())
|
||||||
: elem(std::forward<U>(rhs))
|
: elem(std::forward<U>(rhs))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user