shared_ptr reuses shared_ptr::get as the nonnull value, without a dummy nested class:
// implicit conversion to "bool"
typedef T * (this_type::*unspecified_bool_type)() const;
operator unspecified_bool_type() const // never throws { return px == 0? 0: &this_type::get; }
Perhaps something along these lines will work for boost::function.
Ok, here is my next try:
diff -r1.33 function_base.hpp
271c271
< function_base() : manager(0), functor(static_cast
inline function_base() : manager(0), functor(static_cast
(0)) {}
274c274 < bool empty() const { return !manager; } ---
inline bool empty() const { return !manager; }
284c284 < operator bool () const { return !this->empty(); } ---
inline operator bool () const { return !this->empty(); }
287,291c287 < struct dummy { < void nonnull() {}; < }; < < typedef void (dummy::*safe_bool)(); ---
typedef bool (function_base::*safe_bool)() const;
294,295c290,294 < operator safe_bool () const < { return (this->empty())? 0 : &dummy::nonnull; } ---
inline operator safe_bool () const { return (this->empty())? 0 : &function_base::empty; }
inline bool operator!() const { return !this->empty(); }
297,298d295 < safe_bool operator!() const < { return (this->empty())? &dummy::nonnull : 0; } which again results in this error: Error : illegal use of precompiled header (included from: function.hpp:22 KeyStorage.h:12 HostMemoryKeyStorage.h:9 DesKey.h:10 MWPrefixWin32.pch++:15) function_base.hpp line 274 inline bool empty() const { return !manager; } Bertolt -- Free Crypto Token - FCT www.FreeCryptoToken.org