¿Cómo funciona shared_ptr si la condición

En C ++, puedo escribir algo como:

shared_ptr<A> a_sp = someFunctionReturningSharedPtr();
if (a_sp) {
    cout << a_sp->someData << endl;
} else {
    cout << "Shared Pointer is NULL << endl;
} 

Por queif (a_sp) ¿funciona correctamente? @a_sp no es un booleano, pero ¿cómo se verifica si es verdadero o falso? ¿Cómo sabe la condición if para verificar el resultado dea_sp.get() función? O si no es así, ¿cómo es laNULLity of thea_sp comprobado? ¿Hay alguna función enshared_ptr definido que lo convierte en valor booleano?

Respuestas a la pregunta(2)

Su respuesta a la pregunta