Skip to content

Commit 7c29461

Browse files
committed
[STLForwardCompat] Implement llvm::type_identity, NFC
1 parent 652630b commit 7c29461

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

clang/include/clang/Tooling/Transformer/Transformer.h

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ class TransformerImpl {
4242
virtual void
4343
onMatchImpl(const ast_matchers::MatchFinder::MatchResult &Result) = 0;
4444
};
45-
46-
// FIXME: Use std::type_identity or backport when available.
47-
template <class T> struct type_identity {
48-
using type = T;
49-
};
5045
} // namespace detail
5146

5247
template <typename T> struct TransformerResult {
@@ -95,8 +90,8 @@ class Transformer : public ast_matchers::MatchFinder::MatchCallback {
9590
template <typename MetadataT>
9691
explicit Transformer(
9792
transformer::RewriteRuleWith<MetadataT> Rule,
98-
std::function<void(llvm::Expected<TransformerResult<
99-
typename detail::type_identity<MetadataT>::type>>)>
93+
std::function<void(
94+
llvm::Expected<TransformerResult<llvm::type_identity_t<MetadataT>>>)>
10095
Consumer);
10196

10297
/// N.B. Passes `this` pointer to `MatchFinder`. So, this object should not
@@ -200,8 +195,8 @@ template <typename T> class WithMetadataImpl final : public TransformerImpl {
200195
template <typename MetadataT>
201196
Transformer::Transformer(
202197
transformer::RewriteRuleWith<MetadataT> Rule,
203-
std::function<void(llvm::Expected<TransformerResult<
204-
typename detail::type_identity<MetadataT>::type>>)>
198+
std::function<void(
199+
llvm::Expected<TransformerResult<llvm::type_identity_t<MetadataT>>>)>
205200
Consumer)
206201
: Impl(std::make_unique<detail::WithMetadataImpl<MetadataT>>(
207202
std::move(Rule), std::move(Consumer))) {}

llvm/include/llvm/ADT/STLForwardCompat.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,16 @@ template <typename T>
3636
using remove_cvref_t // NOLINT(readability-identifier-naming)
3737
= typename llvm::remove_cvref<T>::type;
3838

39+
template <typename T>
40+
struct type_identity // NOLINT(readability-identifier-naming)
41+
{
42+
using type = T;
43+
};
44+
45+
template <typename T>
46+
using type_identity_t // NOLINT(readability-identifier-naming)
47+
= typename llvm::type_identity<T>::type;
48+
3949
//===----------------------------------------------------------------------===//
4050
// Features from C++23
4151
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)