63#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_NICE_STRICT_H_
64#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_NICE_STRICT_H_
72template <
class MockClass>
74template <
class MockClass>
76template <
class MockClass>
100#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW && \
101 (defined(_MSC_VER) || defined(__clang__))
104#define GTEST_INTERNAL_EMPTY_BASE_CLASS __declspec(empty_bases)
106#define GTEST_INTERNAL_EMPTY_BASE_CLASS
109template <
typename Base>
117template <
typename Base>
125template <
typename Base>
135template <
class MockClass>
140 static_assert(!internal::HasStrictnessModifier<MockClass>(),
141 "Can't apply NiceMock to a class hierarchy that already has a "
142 "strictness modifier. See "
143 "https://google.github.io/googletest/"
144 "gmock_cook_book.html#NiceStrictNaggy");
146 static_assert(
sizeof(*this) ==
sizeof(MockClass),
147 "The impl subclass shouldn't introduce any padding");
157 template <
typename A>
159 static_assert(
sizeof(*this) ==
sizeof(MockClass),
160 "The impl subclass shouldn't introduce any padding");
163 template <
typename TArg1,
typename TArg2,
typename... An>
165 : MockClass(
std::forward<TArg1>(arg1),
std::forward<TArg2>(arg2),
166 std::forward<An>(args)...) {
167 static_assert(
sizeof(*this) ==
sizeof(MockClass),
168 "The impl subclass shouldn't introduce any padding");
175template <
class MockClass>
179 static_assert(!internal::HasStrictnessModifier<MockClass>(),
180 "Can't apply NaggyMock to a class hierarchy that already has a "
181 "strictness modifier. See "
182 "https://google.github.io/googletest/"
183 "gmock_cook_book.html#NiceStrictNaggy");
187 static_assert(
sizeof(*this) ==
sizeof(MockClass),
188 "The impl subclass shouldn't introduce any padding");
198 template <
typename A>
200 static_assert(
sizeof(*this) ==
sizeof(MockClass),
201 "The impl subclass shouldn't introduce any padding");
204 template <
typename TArg1,
typename TArg2,
typename... An>
206 : MockClass(
std::forward<TArg1>(arg1),
std::forward<TArg2>(arg2),
207 std::forward<An>(args)...) {
208 static_assert(
sizeof(*this) ==
sizeof(MockClass),
209 "The impl subclass shouldn't introduce any padding");
216template <
class MockClass>
222 !internal::HasStrictnessModifier<MockClass>(),
223 "Can't apply StrictMock to a class hierarchy that already has a "
224 "strictness modifier. See "
225 "https://google.github.io/googletest/"
226 "gmock_cook_book.html#NiceStrictNaggy");
228 static_assert(
sizeof(*this) ==
sizeof(MockClass),
229 "The impl subclass shouldn't introduce any padding");
239 template <
typename A>
241 static_assert(
sizeof(*this) ==
sizeof(MockClass),
242 "The impl subclass shouldn't introduce any padding");
245 template <
typename TArg1,
typename TArg2,
typename... An>
247 : MockClass(
std::forward<TArg1>(arg1),
std::forward<TArg2>(arg2),
248 std::forward<An>(args)...) {
249 static_assert(
sizeof(*this) ==
sizeof(MockClass),
250 "The impl subclass shouldn't introduce any padding");
257#undef GTEST_INTERNAL_EMPTY_BASE_CLASS
#define GTEST_INTERNAL_EMPTY_BASE_CLASS
#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)
std::true_type StrictnessModifierProbe(const NiceMock< T > &)
constexpr bool HasStrictnessModifier()
NiceMock(TArg1 &&arg1, TArg2 &&arg2, An &&... args)
NaggyMock(TArg1 &&arg1, TArg2 &&arg2, An &&... args)
StrictMock(TArg1 &&arg1, TArg2 &&arg2, An &&... args)