diff --git a/include/boost/fusion/sequence/container/list/cons.hpp b/include/boost/fusion/sequence/container/list/cons.hpp index 806c8f64..41723596 100644 --- a/include/boost/fusion/sequence/container/list/cons.hpp +++ b/include/boost/fusion/sequence/container/list/cons.hpp @@ -87,12 +87,17 @@ namespace boost { namespace fusion template explicit cons( Sequence const& seq +#if defined(BOOST_MSVC) +// VC++ gets confused when RHS is a derived type. It fails to call +// the copy ctor and attempts to call this templated constructor instead. , typename disable_if< mpl::or_< is_convertible // use copy ctor instead , is_convertible // use copy to car instead > - >::type* dummy = 0) + >::type* dummy = 0 +#endif + ) : car(*fusion::begin(seq)) , cdr(fusion::next(fusion::begin(seq)), mpl::true_()) {} diff --git a/include/boost/fusion/sequence/container/vector/vector.hpp b/include/boost/fusion/sequence/container/vector/vector.hpp index 58f7f6b8..5334973c 100644 --- a/include/boost/fusion/sequence/container/vector/vector.hpp +++ b/include/boost/fusion/sequence/container/vector/vector.hpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include namespace boost { namespace fusion { @@ -52,7 +54,16 @@ namespace boost { namespace fusion : vec(rhs.vec) {} template - explicit vector(T const& rhs) + explicit vector( + T const& rhs +#if defined(BOOST_MSVC) +// VC++ gets confused when RHS is a derived type. It fails to call +// the copy ctor and attempts to call this templated constructor instead. + , typename disable_if< + is_convertible // use copy ctor instead + >::type* dummy = 0 +#endif + ) : vec(rhs) {} // Expand a couple of forwarding constructors for arguments