Boost logo

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