8

I have the following test :

BOOST_CHECK_NE(pointer, nullptr);

The compilation fails due to

/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’)

What is wrong and how should I test for null pointers ?

Barth
  • 15,135
  • 20
  • 70
  • 105

2 Answers2

9

The easiest check for a pointer being non-null is this:

BOOST_CHECK(pointer);

A null pointer implicitly converts to false, a non-null pointer implicitly converts to true.

As to what the problem with your use case is: nullptr is not a pointer type, it's of type std::nullptr_t. It can be converted to any pointer type (or pointer to member type). However, there is no overload of << for inserting std::nullptr_t into a stream. You would have to cast nullptr to the appropriate pointer type to make it work.

Angew is no longer proud of SO
  • 167,307
  • 17
  • 350
  • 455
3

As mentioned in error message, nullptr has ambiguous overloads.

BOOST_CHECK(pointer);

or

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

should do the job.

Jarod42
  • 203,559
  • 14
  • 181
  • 302