Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
364839ab
Commit
364839ab
authored
Aug 13, 2019
by
Krystian Kuzniarek
Browse files
remove a custom implementation of std::remove_const
parent
90a443f9
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
27 additions
and
74 deletions
+27
-74
googlemock/include/gmock/gmock-matchers.h
googlemock/include/gmock/gmock-matchers.h
+19
-18
googlemock/include/gmock/internal/gmock-internal-utils.h
googlemock/include/gmock/internal/gmock-internal-utils.h
+5
-5
googletest/include/gtest/internal/gtest-internal.h
googletest/include/gtest/internal/gtest-internal.h
+1
-22
googletest/test/gtest_unittest.cc
googletest/test/gtest_unittest.cc
+2
-29
No files found.
googlemock/include/gmock/gmock-matchers.h
View file @
364839ab
...
...
@@ -1610,8 +1610,9 @@ class PointeeMatcher {
template
<
typename
Pointer
>
class
Impl
:
public
MatcherInterface
<
Pointer
>
{
public:
typedef
typename
PointeeOf
<
GTEST_REMOVE_CONST_
(
// NOLINT
GTEST_REMOVE_REFERENCE_
(
Pointer
))
>::
type
Pointee
;
typedef
typename
PointeeOf
<
typename
std
::
remove_const
<
GTEST_REMOVE_REFERENCE_
(
Pointer
)
>::
type
>::
type
Pointee
;
explicit
Impl
(
const
InnerMatcher
&
matcher
)
:
matcher_
(
MatcherCast
<
const
Pointee
&>
(
matcher
))
{}
...
...
@@ -1749,8 +1750,8 @@ class FieldMatcher {
// FIXME: The dispatch on std::is_pointer was introduced as a workaround for
// a compiler bug, and can now be removed.
return
MatchAndExplainImpl
(
typename
std
::
is_pointer
<
GTEST_REMOVE_CONST_
(
T
)
>::
type
(),
value
,
listener
);
typename
std
::
is_pointer
<
typename
std
::
remove_const
<
T
>::
type
>::
type
(),
value
,
listener
);
}
private:
...
...
@@ -1816,8 +1817,8 @@ class PropertyMatcher {
template
<
typename
T
>
bool
MatchAndExplain
(
const
T
&
value
,
MatchResultListener
*
listener
)
const
{
return
MatchAndExplainImpl
(
typename
std
::
is_pointer
<
GTEST_REMOVE_CONST_
(
T
)
>::
type
(),
value
,
listener
);
typename
std
::
is_pointer
<
typename
std
::
remove_const
<
T
>::
type
>::
type
(),
value
,
listener
);
}
private:
...
...
@@ -2093,9 +2094,8 @@ class ContainerEqMatcher {
template
<
typename
LhsContainer
>
bool
MatchAndExplain
(
const
LhsContainer
&
lhs
,
MatchResultListener
*
listener
)
const
{
// GTEST_REMOVE_CONST_() is needed to work around an MSVC 8.0 bug
// that causes LhsContainer to be a const type sometimes.
typedef
internal
::
StlContainerView
<
GTEST_REMOVE_CONST_
(
LhsContainer
)
>
typedef
internal
::
StlContainerView
<
typename
std
::
remove_const
<
LhsContainer
>::
type
>
LhsView
;
typedef
typename
LhsView
::
type
LhsStlContainer
;
StlContainerReference
lhs_stl_container
=
LhsView
::
ConstReference
(
lhs
);
...
...
@@ -4034,12 +4034,12 @@ BeginEndDistanceIs(const DistanceMatcher& distance_matcher) {
// values that are included in one container but not the other. (Duplicate
// values and order differences are not explained.)
template
<
typename
Container
>
inline
PolymorphicMatcher
<
internal
::
ContainerEqMatcher
<
// NOLINT
GTEST_REMOVE_CONST_
(
Container
)
>
>
ContainerEq
(
const
Container
&
rhs
)
{
inline
PolymorphicMatcher
<
internal
::
ContainerEqMatcher
<
typename
std
::
remove_const
<
Container
>::
type
>
>
ContainerEq
(
const
Container
&
rhs
)
{
// This following line is for working around a bug in MSVC 8.0,
// which causes Container to be a const type sometimes.
typedef
GTEST_REMOVE_CONST_
(
Container
)
RawContainer
;
typedef
typename
std
::
remove_const
<
Container
>::
type
RawContainer
;
return
MakePolymorphicMatcher
(
internal
::
ContainerEqMatcher
<
RawContainer
>
(
rhs
));
}
...
...
@@ -4072,12 +4072,12 @@ WhenSorted(const ContainerMatcher& container_matcher) {
// LHS container and the RHS container respectively.
template
<
typename
TupleMatcher
,
typename
Container
>
inline
internal
::
PointwiseMatcher
<
TupleMatcher
,
GTEST_REMOVE_CONST_
(
Container
)
>
typename
std
::
remove_const
<
Container
>::
type
>
Pointwise
(
const
TupleMatcher
&
tuple_matcher
,
const
Container
&
rhs
)
{
// This following line is for working around a bug in MSVC 8.0,
// which causes Container to be a const type sometimes (e.g. when
// rhs is a const int[])..
typedef
GTEST_REMOVE_CONST_
(
Container
)
RawContainer
;
typedef
typename
std
::
remove_const
<
Container
>::
type
RawContainer
;
return
internal
::
PointwiseMatcher
<
TupleMatcher
,
RawContainer
>
(
tuple_matcher
,
rhs
);
}
...
...
@@ -4105,14 +4105,15 @@ inline internal::PointwiseMatcher<TupleMatcher, std::vector<T> > Pointwise(
template
<
typename
Tuple2Matcher
,
typename
RhsContainer
>
inline
internal
::
UnorderedElementsAreArrayMatcher
<
typename
internal
::
BoundSecondMatcher
<
Tuple2Matcher
,
typename
internal
::
StlContainerView
<
GTEST_REMOVE_CONST_
(
RhsContainer
)
>::
type
::
value_type
>
>
Tuple2Matcher
,
typename
internal
::
StlContainerView
<
typename
std
::
remove_const
<
RhsContainer
>::
type
>::
type
::
value_type
>>
UnorderedPointwise
(
const
Tuple2Matcher
&
tuple2_matcher
,
const
RhsContainer
&
rhs_container
)
{
// This following line is for working around a bug in MSVC 8.0,
// which causes RhsContainer to be a const type sometimes (e.g. when
// rhs_container is a const int[]).
typedef
GTEST_REMOVE_CONST_
(
RhsContainer
)
RawRhsContainer
;
typedef
typename
std
::
remove_const
<
RhsContainer
>::
type
RawRhsContainer
;
// RhsView allows the same code to handle RhsContainer being a
// STL-style container and it being a native C-style array.
...
...
googlemock/include/gmock/internal/gmock-internal-utils.h
View file @
364839ab
...
...
@@ -429,8 +429,8 @@ class StlContainerView {
static
const_reference
ConstReference
(
const
RawContainer
&
container
)
{
// Ensures that RawContainer is not a const type.
testing
::
StaticAssertTypeEq
<
RawContainer
,
GTEST_REMOVE_CONST_
(
RawContainer
)
>
();
testing
::
StaticAssertTypeEq
<
RawContainer
,
typename
std
::
remove_const
<
RawContainer
>::
type
>
();
return
container
;
}
static
type
Copy
(
const
RawContainer
&
container
)
{
return
container
;
}
...
...
@@ -440,7 +440,7 @@ class StlContainerView {
template
<
typename
Element
,
size_t
N
>
class
StlContainerView
<
Element
[
N
]
>
{
public:
typedef
GTEST_REMOVE_CONST_
(
Element
)
RawElement
;
typedef
typename
std
::
remove_const
<
Element
>::
type
RawElement
;
typedef
internal
::
NativeArray
<
RawElement
>
type
;
// NativeArray<T> can represent a native array either by value or by
// reference (selected by a constructor argument), so 'const type'
...
...
@@ -464,8 +464,8 @@ class StlContainerView<Element[N]> {
template
<
typename
ElementPointer
,
typename
Size
>
class
StlContainerView
<
::
std
::
tuple
<
ElementPointer
,
Size
>
>
{
public:
typedef
GTEST_REMOVE_CONST_
(
typename
internal
::
PointeeOf
<
ElementPointer
>::
type
)
RawElement
;
typedef
typename
std
::
remove_const
<
typename
internal
::
PointeeOf
<
ElementPointer
>::
type
>::
type
RawElement
;
typedef
internal
::
NativeArray
<
RawElement
>
type
;
typedef
const
type
const_reference
;
...
...
googletest/include/gtest/internal/gtest-internal.h
View file @
364839ab
...
...
@@ -869,30 +869,9 @@ struct RemoveReference<T&> { typedef T type; }; // NOLINT
#define GTEST_REMOVE_REFERENCE_(T) \
typename ::testing::internal::RemoveReference<T>::type
// Removes const from a type if it is a const type, otherwise leaves
// it unchanged. This is the same as tr1::remove_const, which is not
// widely available yet.
template
<
typename
T
>
struct
RemoveConst
{
typedef
T
type
;
};
// NOLINT
template
<
typename
T
>
struct
RemoveConst
<
const
T
>
{
typedef
T
type
;
};
// NOLINT
// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above
// definition to fail to remove the const in 'const int[3]' and 'const
// char[3][4]'. The following specialization works around the bug.
template
<
typename
T
,
size_t
N
>
struct
RemoveConst
<
const
T
[
N
]
>
{
typedef
typename
RemoveConst
<
T
>::
type
type
[
N
];
};
// A handy wrapper around RemoveConst that works when the argument
// T depends on template parameters.
#define GTEST_REMOVE_CONST_(T) \
typename ::testing::internal::RemoveConst<T>::type
// Turns const U&, U&, const U, and U all into U.
#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
GTEST_REMOVE_CONST_(
GTEST_REMOVE_REFERENCE_(T)
)
typename std::remove_const<
GTEST_REMOVE_REFERENCE_(T)
>::type
// IsAProtocolMessage<T>::value is a compile-time bool constant that's
// true if T is type proto2::Message or a subclass of it.
...
...
googletest/test/gtest_unittest.cc
View file @
364839ab
...
...
@@ -61,9 +61,10 @@ TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) {
#include <time.h>
#include <map>
#include <vector>
#include <ostream>
#include <type_traits>
#include <unordered_set>
#include <vector>
#include "gtest/gtest-spi.h"
#include "src/gtest-internal-inl.h"
...
...
@@ -262,7 +263,6 @@ using testing::internal::OsStackTraceGetterInterface;
using
testing
::
internal
::
ParseInt32Flag
;
using
testing
::
internal
::
RelationToSourceCopy
;
using
testing
::
internal
::
RelationToSourceReference
;
using
testing
::
internal
::
RemoveConst
;
using
testing
::
internal
::
RemoveReference
;
using
testing
::
internal
::
ShouldRunTestOnShard
;
using
testing
::
internal
::
ShouldShard
;
...
...
@@ -7135,33 +7135,6 @@ TEST(RemoveReferenceTest, MacroVersion) {
TestGTestRemoveReference
<
const
char
,
const
char
&>
();
}
// Tests that RemoveConst does not affect non-const types.
TEST
(
RemoveConstTest
,
DoesNotAffectNonConstType
)
{
CompileAssertTypesEqual
<
int
,
RemoveConst
<
int
>::
type
>
();
CompileAssertTypesEqual
<
char
&
,
RemoveConst
<
char
&>::
type
>
();
}
// Tests that RemoveConst removes const from const types.
TEST
(
RemoveConstTest
,
RemovesConst
)
{
CompileAssertTypesEqual
<
int
,
RemoveConst
<
const
int
>::
type
>
();
CompileAssertTypesEqual
<
char
[
2
],
RemoveConst
<
const
char
[
2
]
>::
type
>
();
CompileAssertTypesEqual
<
char
[
2
][
3
],
RemoveConst
<
const
char
[
2
][
3
]
>::
type
>
();
}
// Tests GTEST_REMOVE_CONST_.
template
<
typename
T1
,
typename
T2
>
void
TestGTestRemoveConst
()
{
CompileAssertTypesEqual
<
T1
,
GTEST_REMOVE_CONST_
(
T2
)
>
();
}
TEST
(
RemoveConstTest
,
MacroVersion
)
{
TestGTestRemoveConst
<
int
,
int
>
();
TestGTestRemoveConst
<
double
&
,
double
&>
();
TestGTestRemoveConst
<
char
,
const
char
>
();
}
// Tests GTEST_REMOVE_REFERENCE_AND_CONST_.
template
<
typename
T1
,
typename
T2
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment