Google Mock testing::internal::ReturnAction‹R›массив с отрицательным размером

У меня есть тестовый код, который делает что-то вроде

EXPECT_CALL(mock, getSomeString()).WillOnce(Return(&testString));

где getSomeString() возвращается по ссылке:

std:string& getSomeString();

и получить

../../../../src/test/unit/gmock/gmock-actions.h: In member function ‘testing::internal::ReturnAction<R>::operator testing::Action<Func>() const [with F = const std::string&(), R = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]’:
../../../../src/test/unit/MyTests.cc:148:   instantiated from here
../../../../src/test/unit/gmock/gmock-actions.h:467: error: creating array with negative size (‘-0x00000000000000001’)

В чем причина?


person Alexander Torstling    schedule 19.05.2015    source источник


Ответы (1)


Проверьте gmock-actions.h:467, и вы увидите:

GMOCK_COMPILE_ASSERT_(
        !internal::is_reference<Result>::value,
        use_ReturnRef_instead_of_Return_to_return_a_reference);

Таким образом, ответ заключается в использовании ReturnRef вместо Return:

EXPECT_CALL(mock, getSomeString()).WillOnce(ReturnRef(testString));
person Alexander Torstling    schedule 19.05.2015
comment
@feuGene. Я согласен, что это бесполезно, но я не думаю, что это вина Google. В основном это общедоступный способ генерации ошибки времени компиляции: stackoverflow.com/questions/16192575/ - person Alexander Torstling; 14.03.2017