diff options
| -rw-r--r-- | googlemock/include/gmock/gmock-matchers.h | 24 | ||||
| -rw-r--r-- | googlemock/include/gmock/internal/gmock-internal-utils.h | 9 | ||||
| -rw-r--r-- | googlemock/test/gmock-more-actions_test.cc | 1 | ||||
| -rw-r--r-- | googletest/docs/advanced.md | 7 | ||||
| -rw-r--r-- | googletest/include/gtest/gtest.h | 5 | ||||
| -rw-r--r-- | googletest/include/gtest/internal/gtest-internal.h | 7 | ||||
| -rw-r--r-- | googletest/include/gtest/internal/gtest-port.h | 11 | 
7 files changed, 26 insertions, 38 deletions
| diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h index ad166875..bf9eb205 100644 --- a/googlemock/include/gmock/gmock-matchers.h +++ b/googlemock/include/gmock/gmock-matchers.h @@ -2068,15 +2068,15 @@ class ContainerEqMatcher {    typedef typename View::type StlContainer;    typedef typename View::const_reference StlContainerReference; +  static_assert(!std::is_const<Container>::value, +                "Container type must not be const"); +  static_assert(!std::is_reference<Container>::value, +                "Container type must not be a reference"); +    // We make a copy of expected in case the elements in it are modified    // after this matcher is created.    explicit ContainerEqMatcher(const Container& expected) -      : expected_(View::Copy(expected)) { -    // Makes sure the user doesn't instantiate this class template -    // with a const or reference type. -    (void)testing::StaticAssertTypeEq<Container, -        GTEST_REMOVE_REFERENCE_AND_CONST_(Container)>(); -  } +      : expected_(View::Copy(expected)) {}    void DescribeTo(::std::ostream* os) const {      *os << "equals "; @@ -2243,15 +2243,15 @@ class PointwiseMatcher {    typedef typename RhsView::type RhsStlContainer;    typedef typename RhsStlContainer::value_type RhsValue; +  static_assert(!std::is_const<RhsContainer>::value, +                "RhsContainer type must not be const"); +  static_assert(!std::is_reference<RhsContainer>::value, +                "RhsContainer type must not be a reference"); +    // Like ContainerEq, we make a copy of rhs in case the elements in    // it are modified after this matcher is created.    PointwiseMatcher(const TupleMatcher& tuple_matcher, const RhsContainer& rhs) -      : tuple_matcher_(tuple_matcher), rhs_(RhsView::Copy(rhs)) { -    // Makes sure the user doesn't instantiate this class template -    // with a const or reference type. -    (void)testing::StaticAssertTypeEq<RhsContainer, -        GTEST_REMOVE_REFERENCE_AND_CONST_(RhsContainer)>(); -  } +      : tuple_matcher_(tuple_matcher), rhs_(RhsView::Copy(rhs)) {}    template <typename LhsContainer>    operator Matcher<LhsContainer>() const { diff --git a/googlemock/include/gmock/internal/gmock-internal-utils.h b/googlemock/include/gmock/internal/gmock-internal-utils.h index e05b8835..fdc049c5 100644 --- a/googlemock/include/gmock/internal/gmock-internal-utils.h +++ b/googlemock/include/gmock/internal/gmock-internal-utils.h @@ -384,9 +384,8 @@ class StlContainerView {    typedef const type& const_reference;    static const_reference ConstReference(const RawContainer& container) { -    // Ensures that RawContainer is not a const type. -    testing::StaticAssertTypeEq< -        RawContainer, typename std::remove_const<RawContainer>::type>(); +    static_assert(!std::is_const<RawContainer>::value, +                  "RawContainer type must not be const");      return container;    }    static type Copy(const RawContainer& container) { return container; } @@ -406,8 +405,8 @@ class StlContainerView<Element[N]> {    typedef const type const_reference;    static const_reference ConstReference(const Element (&array)[N]) { -    // Ensures that Element is not a const type. -    testing::StaticAssertTypeEq<Element, RawElement>(); +    static_assert(std::is_same<Element, RawElement>::value, +                  "Element type must not be const");      return type(array, N, RelationToSourceReference());    }    static type Copy(const Element (&array)[N]) { diff --git a/googlemock/test/gmock-more-actions_test.cc b/googlemock/test/gmock-more-actions_test.cc index b4e0fc30..97ec5cf0 100644 --- a/googlemock/test/gmock-more-actions_test.cc +++ b/googlemock/test/gmock-more-actions_test.cc @@ -57,7 +57,6 @@ using testing::ReturnPointee;  using testing::SaveArg;  using testing::SaveArgPointee;  using testing::SetArgReferee; -using testing::StaticAssertTypeEq;  using testing::Unused;  using testing::WithArg;  using testing::WithoutArgs; diff --git a/googletest/docs/advanced.md b/googletest/docs/advanced.md index 51005e93..3e5f779d 100644 --- a/googletest/docs/advanced.md +++ b/googletest/docs/advanced.md @@ -464,9 +464,10 @@ You can call the function  to assert that types `T1` and `T2` are the same. The function does nothing if  the assertion is satisfied. If the types are different, the function call will -fail to compile, and the compiler error message will likely (depending on the -compiler) show you the actual values of `T1` and `T2`. This is mainly useful -inside template code. +fail to compile, the compiler error message will say that +`type1 and type2 are not the same type` and most likely (depending on the compiler) +show you the actual values of `T1` and `T2`. This is mainly useful inside +template code.  **Caveat**: When used inside a member function of a class template or a function  template, `StaticAssertTypeEq<T1, T2>()` is effective only if the function is diff --git a/googletest/include/gtest/gtest.h b/googletest/include/gtest/gtest.h index 8e125a45..dbe5b1c2 100644 --- a/googletest/include/gtest/gtest.h +++ b/googletest/include/gtest/gtest.h @@ -2297,8 +2297,9 @@ class GTEST_API_ ScopedTrace {  //  // to cause a compiler error.  template <typename T1, typename T2> -bool StaticAssertTypeEq() { -  (void)internal::StaticAssertTypeEqHelper<T1, T2>(); +constexpr bool StaticAssertTypeEq() noexcept { +  static_assert(std::is_same<T1, T2>::value, +                "type1 and type2 are not the same type");    return true;  } diff --git a/googletest/include/gtest/internal/gtest-internal.h b/googletest/include/gtest/internal/gtest-internal.h index 22127c7f..82ec6e24 100644 --- a/googletest/include/gtest/internal/gtest-internal.h +++ b/googletest/include/gtest/internal/gtest-internal.h @@ -1069,10 +1069,9 @@ class NativeArray {    }   private: -  enum { -    kCheckTypeIsNotConstOrAReference = StaticAssertTypeEqHelper< -        Element, GTEST_REMOVE_REFERENCE_AND_CONST_(Element)>::value -  }; +  static_assert(!std::is_const<Element>::value, "Type must not be const"); +  static_assert(!std::is_reference<Element>::value, +                "Type must not be a reference");    // Initializes this object with a copy of the input.    void InitCopy(const Element* array, size_t a_size) { diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h index 0813adce..063fcb10 100644 --- a/googletest/include/gtest/internal/gtest-port.h +++ b/googletest/include/gtest/internal/gtest-port.h @@ -856,17 +856,6 @@ class Secret;  // expression is false, compiler will issue an error containing this identifier.  #define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg) -// StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h. -// -// This template is declared, but intentionally undefined. -template <typename T1, typename T2> -struct StaticAssertTypeEqHelper; - -template <typename T> -struct StaticAssertTypeEqHelper<T, T> { -  enum { value = true }; -}; -  // Evaluates to the number of elements in 'array'.  #define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0])) | 
