I realisierte die folgend in GCC 4.7 Fein kompiliert:Kann ich einem shared_ptr 0 zuweisen? Warum?
#include <memory>
int main() {
std::shared_ptr<int> p;
p = 0;
}
Es gibt jedoch keinen Zuweisungsoperator aus int
oder von int*
, und es gibt keinen impliziten Konstruktor entweder int
int*
oder auch nicht. Es gibt einen Konstruktor von int*
, aber dieser ist explizit. Ich überprüfte die Implementierung der Standardbibliothek und der Konstruktor ist in der Tat explizit, und keine fischigen Zuweisungsoperatoren sind in Sicht.
Ist das Programm wirklich wohlgeformt oder spielt GCC mit mir?
'0' ist das spezielle Literal, es konvertiert zu' nullptr_t' – Abyx
@LucDanton es ist, weil g ++ sehr schlau ist und '42 - 42 'in' 0' konvertiert. Das gleiche passiert (passiert?) In Clang, IIRC, es wurde bei GN2012 erwähnt – Abyx
@Abyx Sie haben den Punkt verfehlt - '0' hat keine besondere Behandlung als Literal in der Sprache. –