Disable move constructor and assignment operator for test classes.
Disable move operations for TEST() and TEST_F() macros. Previous implementation disabled only copy ctor and assing operator, but this was violating rule of 5[1], which was captured by static code analysis tools like clang-tidy `cppcoreguidelines-special-member-functions`. [1]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c21-if-you-define-or-delete-any-default-operation-define-or-delete-them-all
This commit is contained in:
parent
d166e09483
commit
9d8222ad66
@ -1395,6 +1395,8 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; }
|
|||||||
static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \
|
static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \
|
||||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
||||||
test_name)); \
|
test_name)); \
|
||||||
|
GTEST_DISALLOW_MOVE_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
||||||
|
test_name)); \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
||||||
|
@ -190,8 +190,10 @@
|
|||||||
// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.
|
// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.
|
||||||
// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a
|
// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a
|
||||||
// variable don't have to be used.
|
// variable don't have to be used.
|
||||||
// GTEST_DISALLOW_ASSIGN_ - disables operator=.
|
// GTEST_DISALLOW_ASSIGN_ - disables copy operator=.
|
||||||
// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=.
|
// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=.
|
||||||
|
// GTEST_DISALLOW_MOVE_ASSIGN_ - disables move operator=.
|
||||||
|
// GTEST_DISALLOW_MOVE_AND_ASSIGN_ - disables move ctor and operator=.
|
||||||
// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used.
|
// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used.
|
||||||
// GTEST_INTENTIONAL_CONST_COND_PUSH_ - start code section where MSVC C4127 is
|
// GTEST_INTENTIONAL_CONST_COND_PUSH_ - start code section where MSVC C4127 is
|
||||||
// suppressed (constant conditional).
|
// suppressed (constant conditional).
|
||||||
@ -666,7 +668,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// A macro to disallow operator=
|
// A macro to disallow copy operator=
|
||||||
// This should be used in the private: declarations for a class.
|
// This should be used in the private: declarations for a class.
|
||||||
#define GTEST_DISALLOW_ASSIGN_(type) \
|
#define GTEST_DISALLOW_ASSIGN_(type) \
|
||||||
void operator=(type const &) = delete
|
void operator=(type const &) = delete
|
||||||
@ -677,6 +679,17 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
|
|||||||
type(type const &) = delete; \
|
type(type const &) = delete; \
|
||||||
GTEST_DISALLOW_ASSIGN_(type)
|
GTEST_DISALLOW_ASSIGN_(type)
|
||||||
|
|
||||||
|
// A macro to disallow move operator=
|
||||||
|
// This should be used in the private: declarations for a class.
|
||||||
|
#define GTEST_DISALLOW_MOVE_ASSIGN_(type) \
|
||||||
|
void operator=(type &&) = delete
|
||||||
|
|
||||||
|
// A macro to disallow move constructor and operator=
|
||||||
|
// This should be used in the private: declarations for a class.
|
||||||
|
#define GTEST_DISALLOW_MOVE_AND_ASSIGN_(type) \
|
||||||
|
type(type &&) = delete; \
|
||||||
|
GTEST_DISALLOW_MOVE_ASSIGN_(type)
|
||||||
|
|
||||||
// Tell the compiler to warn about unused return values for functions declared
|
// Tell the compiler to warn about unused return values for functions declared
|
||||||
// with this macro. The macro should be used on function declarations
|
// with this macro. The macro should be used on function declarations
|
||||||
// following the argument list:
|
// following the argument list:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user