[ORC-RT] Add a std::identity substitute.
authorLang Hames <lhames@gmail.com>
Fri, 26 Aug 2022 22:32:17 +0000 (15:32 -0700)
committerLang Hames <lhames@gmail.com>
Fri, 26 Aug 2022 22:58:10 +0000 (15:58 -0700)
The __orc_rt::identity utility is intended to serve as a substitute for
c++20's std::identity until we can use the latter (when LLVM moves to c++20).

compiler-rt/lib/orc/stl_extras.h

index ad7286e..e4f8bf0 100644 (file)
@@ -41,6 +41,16 @@ decltype(auto) apply_tuple(F &&f, Tuple &&t) {
                                   Indices{});
 }
 
+/// Substitute for std::identity.
+/// Switch to std::identity once we can use c++20.
+template <class Ty> struct identity {
+  using is_transparent = void;
+  using argument_type = Ty;
+
+  Ty &operator()(Ty &self) const { return self; }
+  const Ty &operator()(const Ty &self) const { return self; }
+};
+
 } // namespace __orc_rt
 
 #endif // ORC_RT_STL_EXTRAS