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