Я изучал, как std::tr1::shared_ptr<>
предоставляет возможность отбрасывать в bool. Я был пойман в прошлом, пытаясь создать умный указатель, который можно отличить до bool как тривиальное решение, т.е.
operator bool() {
return m_Ptr!=0;
}
обычно заканчивается тем, что он неявным образом применяется к типу указателя (предположительно по типу продвижения), что обычно нежелательно. Как реализация boost, так и Microsoft используют трюк, включающий литье в unspecified_bool_type()
. Может ли кто-нибудь объяснить, как работает этот механизм, и как он предотвращает неявное литье на основной тип указателя?