Daniel Frey wrote: > Nice idea! I already had something similar in mind, but you managed to > make it really generic. Not really, all I've done is to borrow the code from shared_ptr, and to put into a shape like one of the existing unary operator helpers in operator.hpp. Thanks anyway though :-)
> The only problem I see is that an instance of safe_bool_conversion is > created which is not really needed. I suggest to rely on the operator! > provided by T: > > template< class T, class B = ::boost::detail::empty_base > > struct bool_testable : B > { > private: > typedef bool (T::*unspecified_bool_type)() const; > > public: > operator unspecified_bool_type() const > { > return !static_cast< const T& >( *this ) ? 0 : &T::operator!(); > } > }; I thought of this too, but this limits the user to using a member based operator!. So I couldn't do this : class A : public boost::bool_testable<A> { public: int get(); }; bool operator!(const A& a) { return a.get() == 0; } Of course I've never actually wanted to do that, so its maybe not a problem. After all the conversion operator itself has to be a member, so it probably isn't much of a restriction at all. Then again, how much does the safe_bool_conversion function cost? Sam _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost