Boost.Test проверить, является ли указатель нулевым

У меня есть следующий тест:

BOOST_CHECK_NE(pointer, nullptr);

Компиляция не удалась из-за

/xxx/include/boost/test/tools/detail/print_helper.hpp:50:14: ошибка: неоднозначная перегрузка для оператора "operator<<" (типы операндов: "std:: ostream {aka std:: basic_ostream}" и " станд:: nullptr_t ')

Что не так и как я должен проверять нулевые указатели?

2 ответа

Решение

Самая простая проверка для ненулевого указателя заключается в следующем:

BOOST_CHECK(pointer);

Нулевой указатель неявно преобразуется в falseненулевой указатель неявно преобразуется в true,

Что касается проблемы с вашим вариантом использования: nullptr это не тип указателя, это тип std::nullptr_t, Он может быть преобразован в любой тип указателя (или указатель на тип элемента). Тем не менее, нет перегрузки << для вставки std::nullptr_t в поток. Вы должны были бы бросить nullptr к соответствующему типу указателя, чтобы он работал.

Как указано в сообщении об ошибке, nullptr имеет неоднозначные перегрузки.

BOOST_CHECK(pointer);

или же

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

должен сделать работу.

Другие вопросы по тегам