Estaba investigando cómo std::tr1::shared_ptr<>
proporciona la capacidad de transmitir a bool. He quedó atrapado en el pasado cuando se trata de crear un puntero inteligente que se puede lanzar a bool como la solución trivial, es decir¿Cómo shared_ptr <> permite de forma segura el casting bool?
operator bool() {
return m_Ptr!=0;
}
por lo general termina siendo implícitamente convertible al tipo de puntero (presumiblemente por la promoción Tipo), que en general es indeseable. Tanto el impulso como las implementaciones de Microsoft parecen usar un truco que involucra la conversión a un unspecified_bool_type()
. ¿Alguien puede explicar cómo funciona este mecanismo y cómo previene la conversión implícita al tipo de puntero subyacente?
Todas las respuestas excelentes, gracias. Es bueno poder ponerle nombre: no había encontrado el idioma de bool seguro antes. –