[clang] [clang]: implement std::meta::is_type (PR #211653)
Ambrose Leeb via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 16 08:59:25 PDT 2026
================
@@ -0,0 +1,76 @@
+// RUN: %clang_cc1 %s -std=c++26 -freflection -fsyntax-only -verify
+// RUN: %clang_cc1 %s -std=c++26 -freflection -fexperimental-new-constant-interpreter -fsyntax-only -verify
+
+#include <meta>
+
+static_assert(__is_same(std::meta::info, decltype(^^int)));
+
+struct S {};
+namespace A{};
+
+consteval void test_pass() {
+ static_assert(std::meta::is_type(^^int));
+ static_assert(std::meta::is_type(^^unsigned));
+ static_assert(std::meta::is_type(^^long));
+ static_assert(std::meta::is_type(^^long long));
+ static_assert(std::meta::is_type(^^short));
+ static_assert(std::meta::is_type(^^char));
+ static_assert(std::meta::is_type(^^signed char));
+ static_assert(std::meta::is_type(^^unsigned char));
+ static_assert(std::meta::is_type(^^wchar_t));
+ static_assert(std::meta::is_type(^^char8_t));
+ static_assert(std::meta::is_type(^^char16_t));
+ static_assert(std::meta::is_type(^^char32_t));
+ static_assert(std::meta::is_type(^^bool));
+ static_assert(std::meta::is_type(^^float));
+ static_assert(std::meta::is_type(^^double));
+ static_assert(std::meta::is_type(^^long double));
+ static_assert(std::meta::is_type(^^void));
+ static_assert(std::meta::is_type(^^decltype(nullptr)));
+
+ constexpr std::meta::info null{};
+ static_assert(!std::meta::is_type(null));
+}
+
+using IntAlias = int;
+static_assert(std::meta::is_type(^^const int));
+static_assert(std::meta::is_type(^^volatile int));
+static_assert(std::meta::is_type(^^IntAlias));
+static_assert(std::meta::is_type(^^std::meta::info));
+
+constexpr std::meta::info r = ^^int;
+static_assert(std::meta::is_type(r));
+static_assert(!std::meta::is_type(std::meta::info{}));
+
+template <std::meta::info R> consteval bool f() { return std::meta::is_type(R); }
+static_assert(f<^^int>());
----------------
Sirraide wrote:
I would ask you to test `f<std::meta::info{}>` as well, but I believe that currently crashes; that’s something I fix in my type reflexion patch
https://github.com/llvm/llvm-project/pull/211653
More information about the cfe-commits
mailing list