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));
должен сделать работу.