================
@@ -0,0 +1,177 @@
+// RUN: %check_clang_tidy -std=c++17-or-later %s llvm-redundant-casting %t --
-- -fno-delayed-template-parsing
+
+namespace llvm {
+#define CAST_FUNCTION(name) \
+template <typename To, typename From> \
+[[nodiscard]] inline decltype(auto) name(const From &Val) { \
+ return static_cast<const To&>(Val); \
+} \
+template <typename To, typename From> \
+[[nodiscard]] inline decltype(auto) name(From &Val) { \
+ return static_cast<To&>(Val); \
+} \
+template <typename To, typename From> \
+[[nodiscard]] inline decltype(auto) name(const From *Val) { \
+ return static_cast<const To*>(Val); \
+} \
+template <typename To, typename From> \
+[[nodiscard]] inline decltype(auto) name(From *Val) { \
+ return static_cast<To*>(Val); \
+}
+CAST_FUNCTION(cast)
+CAST_FUNCTION(dyn_cast)
+CAST_FUNCTION(cast_or_null)
+CAST_FUNCTION(cast_if_present)
+CAST_FUNCTION(dyn_cast_or_null)
+CAST_FUNCTION(dyn_cast_if_present)
+}
+
+struct A {};
+struct B : A {};
----------------
vbvictor wrote:
Can we add `struct C : B` and `A& a = cast<C>(a_in)`
Also, crtp pattern and multiple inheritace.
https://github.com/llvm/llvm-project/pull/189274
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits