Maybe a gtest bug - ASSERT_EQ and ASSERT_TRUE compile failure

c++, googletest

Solution

`ASSERT_` macros cannot be used in non-void functions. The details can be found at the primer and this FAQ item.

Problem

I am using the latest gtest. The following code fails in compile: ``` Error_code rc = some_function(); ASSERT_EQ(OK, rc); ``` Error_code is an enum typedef: ``` typedef enum { OK = 0, Warning, Error } Error_code; ``` The error message does not make sense: ``` Downloads/gtest-1.7.0/unzipped/include/gtest/internal/gtest-internal.h:1026:5: error: could not convert ‘testing::internal::AssertHelper((testing::TestPartResult::Type)2u, ((const char*)"source/unit_test/test.cpp"), 182, gtest_ar.testing::AssertionResult::failure_message()).testing::internal::AssertHelper::operator=((*(const testing::Message*)(& testing::Message())))’ from ‘void’ to ‘std::vector<Ttype>’ = ::testing::Message() ^ Downloads/gtest-1.7.0/unzipped/include/gtest/internal/gtest-internal.h:1029:3: note: in expansion of macro ‘GTEST_MESSAGE_AT_’ GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) ^ Downloads/gtest-1.7.0/unzipped/include/gtest/internal/gtest-internal.h:1032:10: note: in expansion of macro ‘GTEST_MESSAGE_’ return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure) ^ Downloads/gtest-1.7.0/unzipped/include/gtest/gtest_pred_impl.h:80:5: note: in expansion of macro ‘GTEST_FATAL_FAILURE_’ on_failure(gtest_ar.failure_message()) ^ Downloads/gtest-1.7.0/unzipped/include/gtest/gtest_pred_impl.h:147:3: note: in expansion of macro ‘GTEST_ASSERT_’ GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ ^ Downloads/gtest-1.7.0/unzipped/include/gtest/gtest_pred_impl.h:166:3: note: in expansion of macro ‘GTEST_PRED_FORMAT2_’ GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_) ^ Downloads/gtest-1.7.0/unzipped/include/gtest/gtest.h:1993:3: note: in expansion of macro ‘ASSERT_PRED_FORMAT2’ ASSERT_PRED_FORMAT2(::testing::internal:: \ ^ Downloads/gtest-1.7.0/unzipped/include/gtest/gtest.h:2011:32: note: in expansion of macro ‘GTEST_ASSERT_EQ’ # define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) ^ source/unit_test/test.cpp:182:5: note: in expansion of macro ‘ASSERT_EQ’ ASSERT_EQ(OK, rc); ``` I changed it to `ASSERT_TRUE(OK == rc)`, similar messy error. Then I change it to `EXPECT_EQ(OK, rc)`, it compiles and runs great! Looks to me, it is a bug somewhere in gtest. But like to confirm.

Original source