|
Boost : |
From: Peter Schregle (p.schregle_at_[hidden])
Date: 2006-03-22 09:09:52
Hi,
I cannot figure out, why the following little program does not compile. It
simply typedefs a variant of a specific bounded type set and then derives a
class from this type. I've tried to compile it with VC 2005. It does not
compile because of ambiguous overloads within the boost::variant source.
It would be very helpful if somebody could shed light on the issue.
Best regards
Peter
PS: I intended to post this to the boost developers list, but I was unable
to log onto the list today.
*************************************************************
#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 ==========
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk