2016-06-07 2 views
6

I가 다음과 같은 시험 :포인터가 null 여부를 확인 Boost.Test

BOOST_CHECK_NE(pointer, nullptr); 

컴파일은 어떤 문제가

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

에 의한 실패하고 내가 널 포인터에 대한 방법을 테스트해야합니까?

false에, 널이 아닌 포인터가 암시 적으로 true로 변환
BOOST_CHECK(pointer); 

널 포인터가 암시 적으로 변환합니다

답변

5

null이 아닌 것을 포인터에 대한 가장 쉬운 검사가 이것이다.

사용 사례의 문제점 : nullptr은 포인터 유형이 아니며 std::nullptr_t입니다. 모든 포인터 유형 (또는 구성원 유형에 대한 포인터)으로 변환 될 수 있습니다. 그러나 std::nullptr_t을 스트림에 삽입하기위한 <<의 오버로드가 없습니다. nullptr을 적절한 포인터 유형으로 캐스팅해야 제대로 작동합니다.

3

오류 메시지에서 언급 한 것처럼 nullptr에는 모호한 오버로드가 있습니다.

BOOST_CHECK(pointer); 

또는

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

가 작업을 수행해야합니다.

관련 문제