2016-06-07 9 views
6

Ich habe folgenden Test:Boost.Test zu prüfen, ob ein Zeiger null ist

BOOST_CHECK_NE(pointer, nullptr); 

Die Zusammenstellung aufgrund fehlschlägt

/xxx/include/boost/test/tools/detail/print_helper.hpp:50:14: error: ambiguous overload for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘std::nullptr_t’)

Was falsch ist, und wie soll ich für Null-Zeiger testen? Diese

Antwort

5

Die einfachste Prüfung für einen Zeiger nicht-Null ist:

BOOST_CHECK(pointer); 

Ein Nullzeiger wandelt implizit false, ein Nicht-Null-Zeiger konvertiert implizit true.

Was das Problem mit Ihrem Anwendungsfall ist: nullptr ist kein Zeigertyp, es ist vom Typ std::nullptr_t. Es kann in jeden beliebigen Zeigertyp (oder Zeiger auf Elementtyp) konvertiert werden. Es gibt jedoch keine Überladung von << zum Einfügen std::nullptr_t in einen Strom. Sie müssten nullptr in den entsprechenden Zeigertyp umwandeln, damit es funktioniert.

3

Wie in der Fehlermeldung erwähnt, hat nullptr mehrdeutige Überladungen.

BOOST_CHECK(pointer); 

oder

BOOST_CHECK_NE(pointer, static_cast<decltype(pointer)>(nullptr)); 

sollte die Arbeit machen.