Сравните ptr с nullptr в gtest - PullRequest
0 голосов
/ 13 февраля 2019

Есть некоторый код:

EXPECT_NE(nullptr,ptr);

И я получаю следующую ошибку компиляции:

'operator <<' is ambiguous

could be 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<<void>(std::nullptr_t)'
or       'std::basic_ostream<char,std::char_traits<char>> &testing::internal2::operator <<<char,std::char_traits<char>,T>(std::basic_ostream<char,std::char_traits<char>> &,const T &)'

Может ли это быть проблемой версии библиотеки?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Если вы хотите быть более явным, вы также можете использовать

EXPECT_TRUE(ptr != nullptr);

(это то, что я обычно делаю)

Кстати.как ни странно, в моем рабочем проекте мне все еще приходится работать с C ++ 98 (по-прежнему собирается для Sun и AIX, хотя он скоро уйдет), и в итоге я создал свой собственный класс NullPtrT и NullPtr вобщая библиотека, которая на самом деле работает с макросами gtest EXPECT_EQ и EXPECT_NE.Так что я могу сделать

EXPECT_NE(NullPtr, ptr);

Я не помню, как именно я сделал эту работу:)

0 голосов
/ 13 февраля 2019
namespace {
  template<class T>
  auto not_nullptr(T*p) -> testing::AssertionResult
  {
    if (p)
      return testing::AssertionSuccess();
    else
      return testing::AssertionFailure() << "pointer is null";
  }
}

...

EXPECT_TRUE(not_nullptr(ptr));

ссылка:

https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#using-a-function-that-returns-an-assertionresult

...