
I have spent a couple of hours trying to resolve the following error when building our system. We have some code that has been compiling and working with GCC with no issues. However building it with MS VC20005 SP1 creates the following error. We are using boost 1.34.1: Error 2 error C2666: 'boost::variant<T0_,T1,T2,T3,T4,T5,T6,T7>::convert_construct' : 2 overloads have similar conversions c:\projects\ardev\currentdev\externallibs\boost\boost\variant\variant.hpp 1342 I have searched the Boost list archives and found this post for boost 1.33.1: http://lists.boost.org/Archives/boost/2006/03/102375.php The author of this post Peter Schreegle did not receive a reply. He attached the below code and build log. It appears that this an issue for variants under visual studio 2005 SP1. Does anyone know if this is an issue for VS 2008? Is this issue for boost 1.35.0 being built by VS 2005 or VS 2008? #include <boost/variant.hpp> typedef boost::variant<char, int, double> numeric_type_variant; class numeric_type : public numeric_type_variant { public: /// Default constructor. numeric_type() : numeric_type_variant() { } template <typename T> /// Converting constructor. numeric_type(T const& t) : numeric_type_variant(t) { } // some more code }; int main(int argc, char* argv[]) { char ba; int bb; double bc; numeric_type a; numeric_type b(ba); numeric_type c(bb); numeric_type d(bc); a = ba; a = bb; a = bc; return 0; } ************************************************************* This is the build log: ------ Build started: Project: test_variant, Configuration: Debug Win32 ------ Compiling... test_variant.cpp c:\_ngi\toolkits\boost_1_33_1\boost\variant\variant.hpp(1342) : error C2666: 'boost::variant<T0_,T1,T2>::convert_construct' : 2 overloads have similar conversions with [ T0_=char, T1=int, T2=double ] c:\_ngi\toolkits\boost_1_33_1\boost\variant\variant.hpp(1327): could be 'void boost::variant<T0_,T1,T2>::convert_construct<char,int,double,boost::detail:: variant::void_,boost::detail::variant::void_,boost::detail::variant::void_,b oost::detail::variant::void_,boost::detail::variant::void_,boost::detail::va riant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boo st::detail::variant::void_,boost::detail::variant::void_,boost::detail::vari ant::void_,boost::detail::variant::void_,boost::detail::variant::void_,boost ::detail::variant::void_,boost::detail::variant::void_,boost::detail::varian t::void_,boost::detail::variant::void_>(const boost::variant<T0_,T1,T2> &,long)' with [ T0_=char, T1=int, T2=double ] c:\_ngi\toolkits\boost_1_33_1\boost\variant\variant.hpp(1258): or 'void boost::variant<T0_,T1,T2>::convert_construct<const T>(T &,int,boost::mpl::false_)' with [ T0_=char, T1=int, T2=double, T=numeric_type ] while trying to match the argument list '(const numeric_type, long)' c:\_ngi\toolkits\boost_1_33_1\boost\variant\variant.hpp(1580) : see reference to function template instantiation 'boost::variant<T0_,T1,T2>::variant<T>(const T &)' being compiled with [ T0_=char, T1=int, T2=double, T=numeric_type ] c:\_ngi\toolkits\boost_1_33_1\boost\variant\variant.hpp(1590) : see reference to function template instantiation 'void boost::variant<T0_,T1,T2>::assign<T>(const T &)' being compiled with [ T0_=char, T1=int, T2=double, T=numeric_type ] c:\_schrott\test_variant\test_variant\test_variant.cpp(36) : see reference to function template instantiation 'boost::variant<T0_,T1,T2> &boost::variant<T0_,T1,T2>::operator =<numeric_type>(const T &)' being compiled with [ T0_=char, T1=int, T2=double, T=numeric_type ] Build log was saved at "file://c:\_schrott\test_variant\test_variant\Debug\BuildLog.htm" test_variant - 1 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========