[clang] [libc] Add invoke / invoke_result type traits (PR #65750)
Clement Courbet via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 14 05:53:30 PDT 2023
================
@@ -145,6 +145,110 @@ TEST(LlvmLibcTypeTraitsTest, integral_constant) {
EXPECT_EQ((integral_constant<int, 4>::value), 4);
}
+namespace invoke_detail {
+
+enum State { INIT = 0, A_APPLY_CALLED, B_APPLY_CALLED };
+
+struct A {
+ State state = INIT;
+ virtual ~A() {}
+ virtual void apply() { state = A_APPLY_CALLED; }
+};
+
+struct B : public A {
+ virtual ~B() {}
+ virtual void apply() { state = B_APPLY_CALLED; }
+};
+
+void free_function() {}
+int free_function_return_5() { return 5; }
+int free_function_passtrough(int value) { return value; }
+
+struct Delegate {
+ int (*ptr)(int) = &free_function_passtrough;
+};
+
+template <int tag> struct Tag {
+ static int value() { return tag; }
----------------
legrosbuffle wrote:
`static constexpr int value = tag;` ?
https://github.com/llvm/llvm-project/pull/65750
More information about the cfe-commits
mailing list