Hello,
We have the following problem with compiling a piece of code using the Intel 9.1 compiler.
The compiler can map the constructor of type_v2 on more than one overloaded constructor of the boost::variant, while in our opinion it should not even concider to use the one that first creates a temporary object (see compiler output). The VC7.1 compiler and the GCC compiler both compile this code correctly.
Can someone help us out with this problem? Or does someone has a workaround for this?
This is a simplified version of the code:
#include
int main(int argc, char**argv)
{
typedef boost::variant type_v1;
typedef boost::variant type_v2;
type_v1 var1( 10 );
type_v2 var2( &var1 );
return 0;
}
This is the compiler output:
D:\3rdParty\boost\boost/variant/variant.hpp(1342): (col. 9)error: more than one instance of overloaded function "boost::variant::convert_construct [with T0_=char, T1=int, T2=boost::variant *, T3=boost::detail::variant::void_, T4=boost::detail::variant::void_, T5=boost::detail::variant::void_, T6=boost::detail::variant::void_, T7=boost::detail::variant::void_, T8=boost::detail::variant::void_, T9=boost::detail::variant::void_, T10=boost::detail::variant::void_, T11=boost::detail::variant::void_, T12=boost::detail::variant::void_, T13=boost::detail::variant::void_, T14=boost::detail::variant::void_, T15=boost::detail::variant::void_, T16=boost::detail::variant::void_, T17=boost::detail::variant::void_, T18=boost::detail::variant::void_, T19=boost::detail::variant::void_]" matches the argument list:
function template "void boost::variant::convert_construct(T &, int, boost::mpl::false_) [with T0_=char, T1=int, T2=boost::variant *, T3=boost::detail::variant::void_, T4=boost::detail::variant::void_, T5=boost::detail::variant::void_, T6=boost::detail::variant::void_, T7=boost::detail::variant::void_, T8=boost::detail::variant::void_, T9=boost::detail::variant::void_, T10=boost::detail::variant::void_, T11=boost::detail::variant::void_, T12=boost::detail::variant::void_, T13=boost::detail::variant::void_, T14=boost::detail::variant::void_, T15=boost::detail::variant::void_, T16=boost::detail::variant::void_, T17=boost::detail::variant::void_, T18=boost::detail::variant::void_, T19=boost::detail::variant::void_]"
function template "void boost::variant::convert_construct(const boost::variant &, long) [with T0_=char, T1=int, T2=boost::variant *, T3=boost::detail::variant::void_, T4=boost::detail::variant::void_, T5=boost::detail::variant::void_, T6=boost::detail::variant::void_, T7=boost::detail::variant::void_, T8=boost::detail::variant::void_, T9=boost::detail::variant::void_, T10=boost::detail::variant::void_, T11=boost::detail::variant::void_, T12=boost::detail::varia
t::void_, T13=boost::detail::variant::void_, T14=boost::detail::variant::void_, T15=boost::detail::variant::void_, T16=boost::detail::variant::void_, T17=boost::detail::variant::void_, T18=boost::detail::variant::void_, T19=boost::detail::variant::void_]"
argument types are: (boost::variant *const, long)
detected during instantiation of "boost::variant::variant(const T &) [with T0_=char, T1=int, T2=boost::variant *, T3=boost::detail::variant::void_, T4=boost::detail::variant::void_, T5=boost::detail::variant::void_, T6=boost::detail::variant::void_, T7=boost::detail::variant::void_, T8=boost::detail::variant::void_, T9=boost::detail::variant::void_, T10=boost::detail::variant::void_, T11=boost::detail::variant::void_, T12=boost::detail::variant::void_, T13=boost::detail::variant::vo
id_, T14=boost::detail::variant::void_, T15=boost::detail::variant::void_, T16=boost::detail::variant::void_, T17=boost::detail::variant::void_, T18=boost::detail::variant::void_, T19=boost::detail::variant::void_, T=boost::variant *]"
make[1]: *** [obj/Win32_x86_INTEL_Debug/Calculator.obj] Error 2
Regards,
Eric Zuur
Shell International Exploration and Production B.V.
Volmerlaan 8, Postbus 60, 2280 AB Rijswijk, The Netherlands