[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