boost::type_traits::is_convertible.hpp ....how to assert a type is _not_ convertible?
hi all, i've got 2 classes like this.... //================================= struct Symbol : private std::string { public: Symbol(const char *cp):std::string(cp){} ~Symbol(){} }; struct String : private std::string { public: String(const String &s):std::string(s.c_str()){} String(const char *cp):std::string(cp){} ~String(){} }; //================================= // // and i'm trying to compile this.... // //================================= template<BinaryOp op, typename ObjectT> Object binary_op(const ObjectT &arg1, const ObjectT &arg2) { return undefined; } template<BinaryOp op> class BinaryOpVisitor : public boost::static_visitor<Object> { public: template<typename ObjectT, typename ObjectU> Object operator()( const ObjectT &arg0, const ObjectU &arg1) const { bool const y = boost::is_convertible<ObjectT, ObjectU>::value; return undefined; } template<typename ObjectT> Object operator ()(const ObjectT &arg0, const ObjectT &arg1) const { return binary_op<op, ObjectT>(arg0, arg1); } }; //================================= // // but using msvc 7.1 i'm getting the following error... // // s:\lib\boost_1_33_1\boost\type_traits\is_convertible.hpp(202) : // error C2243: 'type cast' : conversion from 'Symbol *__w64 ' to 'const std::basic_string<_Elem,_Traits,_Ax> &' exists, but is inaccessible // // //================================= // is_convertible.hpp(202) is as follows ... BOOST_STATIC_CONSTANT(bool, value = sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type) ); //================================= // // // how do i tell (deceive?) the compiler that the conversion does not exist? cheers, jono poff day-one digital auckland, nz
participants (1)
-
jono