Как я могу избавиться от предупреждения компилятора gtest C4800 ('int': принудительное значение bool 'true' или 'false'")

Я унаследовал некоторый код модульного теста (VS2008 C++ для интеллектуального устройства на основе WinCE), который использует gtest. Когда я компилирую модульные тесты, я получаю всевозможные предупреждения C4800 о принудительном использовании целых чисел в bool. Что странно, так это то, что единственными вызовами gtest в модуле, генерирующем предупреждения, являются EXPECT_STREQ.

Является ли это (незначительной) ошибкой в ​​gtest, она делает EXPECT_STREQ таким образом, что сбивает с толку VS2008/WinCE?

Мы используем gtest версии 1.6. Кто-нибудь знает, работает ли версия 1.7 для WinCE?

==============

1>C:\googletest\include\gtest/internal/gtest-port.h(1031) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
1>        C:\googletest\include\gtest/internal/gtest-param-util.h(321) : see reference to function template instantiation 'Derived *testing::internal::CheckedDowncastToActualType<const testing::internal::ValuesInIteratorRangeGenerator<T>::Iterator,const testing::internal::ParamIteratorInterface<T>>(Base *)' being compiled
1>        with
1>        [
1>            Derived=const testing::internal::ValuesInIteratorRangeGenerator<ParamType>::Iterator,
1>            T=ParamType,
1>            Base=const testing::internal::ParamIteratorInterface<bool>
1>        ]
1>        C:\googletest\include\gtest/internal/gtest-param-util.h(314) : while compiling class template member function 'bool testing::internal::ValuesInIteratorRangeGenerator<T>::Iterator::Equals(const testing::internal::ParamIteratorInterface<T> &) const'
1>        with
1>        [
1>            T=ParamType
1>        ]
1>        C:\googletest\include\gtest/internal/gtest-param-util.h(276) : see reference to class template instantiation 'testing::internal::ValuesInIteratorRangeGenerator<T>::Iterator' being compiled
1>        with
1>        [
1>            T=ParamType
1>        ]
1>        C:\googletest\include\gtest/internal/gtest-param-util.h(275) : while compiling class template member function 'testing::internal::ParamIteratorInterface<T> *testing::internal::ValuesInIteratorRangeGenerator<T>::Begin(void) const'
1>        with
1>        [
1>            T=bool
1>        ]
1>        C:\googletest\include\gtest/gtest-param-test.h(314) : see reference to class template instantiation 'testing::internal::ValuesInIteratorRangeGenerator<T>' being compiled
1>        with
1>        [
1>            T=ParamType
1>        ]
1>        C:\googletest\include\gtest/gtest-param-test.h(319) : see reference to function template instantiation 'testing::internal::ParamGenerator<T> testing::ValuesIn<const T*>(ForwardIterator,ForwardIterator)' being compiled
1>        with
1>        [
1>            T=bool,
1>            ForwardIterator=const bool *
1>        ]
1>        C:\googletest\include\gtest/internal/gtest-param-util-generated.h(99) : see reference to function template instantiation 'testing::internal::ParamGenerator<T> testing::ValuesIn<T,2>(const T (&)[2])' being compiled
1>        with
1>        [
1>            T=bool
1>        ]
1>        C:\googletest\include\gtest/gtest-param-test.h(1221) : see reference to function template instantiation 'testing::internal::ValueArray2<T1,T2>::operator testing::internal::ParamGenerator<T>(void) const<bool>' being compiled
1>        with
1>        [
1>            T1=bool,
1>            T2=bool,
1>            T=bool
1>        ]

1 ответ

Предупреждение C4800 выдается, когда int помещается в переменную типа bool, В документации по предупреждению C4800 говорится, что это предупреждение о производительности, поэтому вам, вероятно, не придется беспокоиться об этом.

Если вы хотите скрыть предупреждение, вы можете использовать MSVC #pragma warning(disable:4800) отключить предупреждение.

Так бы это выглядело так

#pragma warning(disable:4800) //Disable the warning

... // Code that gives warning here

#pragma warning(default:4800) //Stop suppressing the warning

Вы можете увидеть документацию для #pragma warning здесь

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