I se dieron cuenta de la siguiente compila bien en GCC 4.7:¿Puedo asignar 0 a un shared_ptr? ¿Por qué?
#include <memory>
int main() {
std::shared_ptr<int> p;
p = 0;
}
Sin embargo, no hay operador de asignación de int
o desde int*
, y no hay constructor implícito de cualquiera int
o int*
tampoco. Hay un constructor de int*
, pero ese es explícito. Comprobé la implementación de la biblioteca estándar y el constructor es explícito y no hay operadores de asignación sospechosos a la vista.
¿El programa está realmente bien formado o GCC está jugando conmigo?
'0' es el literal especial, se convierte en' nullptr_t' – Abyx
@LucDanton porque g ++ es muy inteligente y convierte '42 - 42' en' 0'. Lo mismo sucede (¿sucedió?) En Clang, IIRC, se mencionó en GN2012 – Abyx
@Abyx No entendió el punto - '0' no tiene un tratamiento especial como literal en el idioma. –