boostのsmart_ptr全般で、boolへの暗黙の型変換をするとき、
なんでこんなヘンなことやってるの?
operator bool()ではいけないんですか?

// implicit conversion to "bool"
typedef T * (this_type::*unspecified_bool_type)() const;
operator unspecified_bool_type() const // never throws
{
 return ptr == 0? 0: &this_type::get;
}