{"id":2215716,"url":"http://patchwork.ozlabs.org/api/patches/2215716/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/patch/acOO15PiYmW5H1-F@tucnak/","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/projects/17/?format=json","name":"GNU Compiler Collection","link_name":"gcc","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<acOO15PiYmW5H1-F@tucnak>","list_archive_url":null,"date":"2026-03-25T07:29:27","name":"[RFC] c++: Implement the data_member_spec API change from P3795R1","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"54d5fd8f38ce4cefbf48670930cb563bc8c403b4","submitter":{"id":671,"url":"http://patchwork.ozlabs.org/api/people/671/?format=json","name":"Jakub Jelinek","email":"jakub@redhat.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/acOO15PiYmW5H1-F@tucnak/mbox/","series":[{"id":497390,"url":"http://patchwork.ozlabs.org/api/series/497390/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=497390","date":"2026-03-25T07:29:27","name":"[RFC] c++: Implement the data_member_spec API change from P3795R1","version":1,"mbox":"http://patchwork.ozlabs.org/series/497390/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2215716/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2215716/checks/","tags":{},"related":[],"headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=YhSi6X5o;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=YhSi6X5o","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.133.124"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fgdq20Xpnz1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 18:30:22 +1100 (AEDT)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 1DF1F4BB5886\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 07:30:20 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by sourceware.org (Postfix) with ESMTP id E4C004BA2E10\n for <gcc-patches@gcc.gnu.org>; Wed, 25 Mar 2026 07:29:35 +0000 (GMT)","from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-296-sj-JejhoM4-FLxevtFdigA-1; Wed,\n 25 Mar 2026 03:29:33 -0400","from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 0EAC4195608C\n for <gcc-patches@gcc.gnu.org>; Wed, 25 Mar 2026 07:29:32 +0000 (UTC)","from tucnak.zalov.cz (unknown [10.45.225.193])\n by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id E0B521955D71; Wed, 25 Mar 2026 07:29:30 +0000 (UTC)","from tucnak.zalov.cz (localhost [127.0.0.1])\n by tucnak.zalov.cz (8.18.1/8.18.1) with ESMTPS id 62P7TSlW3767918\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Wed, 25 Mar 2026 08:29:28 +0100","(from jakub@localhost)\n by tucnak.zalov.cz (8.18.1/8.18.1/Submit) id 62P7TRFC3767917;\n Wed, 25 Mar 2026 08:29:27 +0100"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 1DF1F4BB5886","OpenDKIM Filter v2.11.0 sourceware.org E4C004BA2E10"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org E4C004BA2E10","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org E4C004BA2E10","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774423776; cv=none;\n b=G59ucIEr93XIdtEGeqVNS1qkD3HPvNs9QxikzhJSLTHyO1RlMHCj5xwsIS97g6XfsYjG5y3qmldh1YVg00Tqe6ycvZue8J4pF2HdQv8badBU45p8U2jwdvu6fBZwYT4GRVKJzQ3LWHtfgjBE6d+pari385aUJV/s3jCLihzqN3I=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774423776; c=relaxed/simple;\n bh=+z6Y42uNPTxxoG96Z8hsSEMb6O15KvgbTrHTIv7lZHo=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=DYpnqr95AHsT/Tt9nPWr7PY71uLdRI47zjs5d+7eKYicdXjkqKsvEglNb3EKEJUEFywYR2yE650idYjwxmFtGR9T4ozOGrC02YwXFRLS3iy0SSuTkpWnsqe6ibwMSnIkwnj17wNZ2iAR9ZYmlDNQnD4i+lyfWa3dAJPPouXmx7k=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1774423775;\n h=from:from:reply-to:reply-to:subject:subject:date:date:\n message-id:message-id:to:to:cc:cc:mime-version:mime-version:\n content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=BO5UHIyKnMvxhV/zwIl3rmOVWZFPIXnvrBoXRwwlbG4=;\n b=YhSi6X5oO8tAe7ns2OyhVZqEEcTTnx6gD2j3g57LOzii/GhFBMexR4P8qaF6hZ9CaocmAT\n yaUuH4bSDAF7pUstV6rVNkAwPhGYxaZrlWM8nsBe+Kn4dYcX6lyYykJ0kHCvVNPNVo+rKC\n CnbwtUpKX32Xv7O50cjxXPTqtdvR7Hs=","X-MC-Unique":"sj-JejhoM4-FLxevtFdigA-1","X-Mimecast-MFC-AGG-ID":"sj-JejhoM4-FLxevtFdigA_1774423772","Date":"Wed, 25 Mar 2026 08:29:27 +0100","From":"Jakub Jelinek <jakub@redhat.com>","To":"Jason Merrill <jason@redhat.com>, Marek Polacek <polacek@redhat.com>","Cc":"gcc-patches@gcc.gnu.org","Subject":"[RFC PATCH] c++: Implement the data_member_spec API change from\n P3795R1","Message-ID":"<acOO15PiYmW5H1-F@tucnak>","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 3.0 on 10.30.177.17","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"pmEOOYHaPKHRZyT_S1P35x-nHa77QOXiEIqcFMuOdaw_1774423772","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Reply-To":"Jakub Jelinek <jakub@redhat.com>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"},"content":"Hi!\n\nhttps://wg21.link/p3795r1 changes various small things in reflection.\nHere is just the std::meta::data_member_spec API, which unfortunately\nis a huge change because we have to adjust a lot of things in the\ntestsuite (and means a flag day for reflection users).  That said,\nif the change is approved, it would be really bad if the flag day\nwas postponed to GCC 16 -> 17 transition.\n\nThis patch doesn't add the annotations member and its handling, will\ndo that separately.\nOne disadvantage of this part of the paper is that ADL no longer works\nto find data_member_spec when one uses just\ndata_member_spec({.type=something,.name=something}).\n\n2026-03-25  Jakub Jelinek  <jakub@redhat.com>\n\nlibstdc++-v3/\n\t* include/std/meta (std::meta::data_member_options): Add\n\ttype member.\n\t(std::meta::data_member_spec): Remove info argument.\ngcc/cp/\n\t* metafns.gperf (enum metafn_kind_args): Add\n\tMETAFN_KIND_ARGS_DATA_MEMBER_OPTIONS and\n\tMETAFN_KIND_INFO_DATA_MEMBER_OPTIONS, remove\n\tMETAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS and\n\tMETAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS.\n\t(data_member_spec): Use METAFN_KIND_INFO_DATA_MEMBER_OPTIONS\n\trather than METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS.\n\t* reflect.cc (eval_data_member_spec): Remove type argument,\n\tread type from options.type.\n\t(process_metafunction): Adjust assertion for\n\tMETAFN_KIND_ARG_DATA_MEMBER_OPTIONS.  Adjust eval_data_member_spec\n\tcaller.\n\t* metafns.h: Regenerate.\ngcc/testsuite/\n\t* g++.dg/reflect/alignment_of1.C: Adjust for data_member_spec\n\tAPI change.\n\t* g++.dg/reflect/bit_size_of1.C: Likewise.\n\t* g++.dg/reflect/can_substitute1.C: Likewise.\n\t* g++.dg/reflect/complete1.C: Likewise.\n\t* g++.dg/reflect/data_member_spec1.C: Likewise.\n\t* g++.dg/reflect/data_member_spec2.C: Likewise.\n\t* g++.dg/reflect/data_member_spec3.C: Likewise.\n\t* g++.dg/reflect/data_member_spec4.C: Likewise.\n\t* g++.dg/reflect/define_aggregate1.C: Likewise.\n\t* g++.dg/reflect/define_aggregate2.C: Likewise.\n\t* g++.dg/reflect/define_aggregate4.C: Likewise.\n\t* g++.dg/reflect/define_aggregate5.C: Likewise.\n\t* g++.dg/reflect/define_aggregate6.C: Likewise.\n\t* g++.dg/reflect/display_string_of1.C: Likewise.\n\t* g++.dg/reflect/eh5.C: Likewise.\n\t* g++.dg/reflect/has_c_language_linkage1.C: Likewise.\n\t* g++.dg/reflect/has_default_argument1.C: Likewise.\n\t* g++.dg/reflect/has_default_member_initializer1.C: Likewise.\n\t* g++.dg/reflect/has_ellipsis_parameter1.C: Likewise.\n\t* g++.dg/reflect/has_external_linkage1.C: Likewise.\n\t* g++.dg/reflect/has_identifier1.C: Likewise.\n\t* g++.dg/reflect/has_internal_linkage1.C: Likewise.\n\t* g++.dg/reflect/has_linkage1.C: Likewise.\n\t* g++.dg/reflect/has_module_linkage1.C: Likewise.\n\t* g++.dg/reflect/has_parent1.C: Likewise.\n\t* g++.dg/reflect/has_template_arguments1.C: Likewise.\n\t* g++.dg/reflect/identifier_of1.C: Likewise.\n\t* g++.dg/reflect/is_accessible1.C: Likewise.\n\t* g++.dg/reflect/is_alias_template1.C: Likewise.\n\t* g++.dg/reflect/is_bit_field1.C: Likewise.\n\t* g++.dg/reflect/is_class_member1.C: Likewise.\n\t* g++.dg/reflect/is_class_template1.C: Likewise.\n\t* g++.dg/reflect/is_complete_type1.C: Likewise.\n\t* g++.dg/reflect/is_concept1.C: Likewise.\n\t* g++.dg/reflect/is_const1.C: Likewise.\n\t* g++.dg/reflect/is_data_member_spec1.C: Likewise.\n\t* g++.dg/reflect/is_defaulted1.C: Likewise.\n\t* g++.dg/reflect/is_deleted1.C: Likewise.\n\t* g++.dg/reflect/is_enumerator1.C: Likewise.\n\t* g++.dg/reflect/is_explicit_object_parameter1.C: Likewise.\n\t* g++.dg/reflect/is_function1.C: Likewise.\n\t* g++.dg/reflect/is_function_parameter1.C: Likewise.\n\t* g++.dg/reflect/is_function_template1.C: Likewise.\n\t* g++.dg/reflect/is_mutable_member1.C: Likewise.\n\t* g++.dg/reflect/is_namespace1.C: Likewise.\n\t* g++.dg/reflect/is_namespace_alias1.C: Likewise.\n\t* g++.dg/reflect/is_namespace_member1.C: Likewise.\n\t* g++.dg/reflect/is_nonstatic_data_member1.C: Likewise.\n\t* g++.dg/reflect/is_object1.C: Likewise.\n\t* g++.dg/reflect/is_override1.C: Likewise.\n\t* g++.dg/reflect/is_static_member1.C: Likewise.\n\t* g++.dg/reflect/is_template1.C: Likewise.\n\t* g++.dg/reflect/is_type1.C: Likewise.\n\t* g++.dg/reflect/is_type_alias1.C: Likewise.\n\t* g++.dg/reflect/is_user_declared1.C: Likewise.\n\t* g++.dg/reflect/is_user_provided1.C: Likewise.\n\t* g++.dg/reflect/is_variable1.C: Likewise.\n\t* g++.dg/reflect/is_variable_template1.C: Likewise.\n\t* g++.dg/reflect/is_volatile1.C: Likewise.\n\t* g++.dg/reflect/mangle1.C: Likewise.\n\t* g++.dg/reflect/object_of3.C: Likewise.\n\t* g++.dg/reflect/offset_of1.C: Likewise.\n\t* g++.dg/reflect/operator_of1.C: Likewise.\n\t* g++.dg/reflect/p2996-5.C: Likewise.\n\t* g++.dg/reflect/p3394-1.C: Likewise.\n\t* g++.dg/reflect/parent_of1.C: Likewise.\n\t* g++.dg/reflect/range_args.C: Likewise.\n\t* g++.dg/reflect/reflect_constant_array6.C: Likewise.\n\t* g++.dg/reflect/return_type_of1.C: Likewise.\n\t* g++.dg/reflect/size_of1.C: Likewise.\n\t* g++.dg/reflect/source_location_of1.C: Likewise.\n\t* g++.dg/reflect/splice1.C: Likewise.\n\t* g++.dg/reflect/storage_duration2.C: Likewise.\n\t* g++.dg/reflect/substitute1.C: Likewise.\n\t* g++.dg/reflect/type_of1.C: Likewise.\n\t* g++.dg/reflect/u8display_string_of1.C: Likewise.\n\t* g++.dg/reflect/u8identifier_of1.C: Likewise.\n\t* g++.dg/reflect/variable_of1.C: Likewise.\n\t* g++.dg/reflect/visibility1.C: Likewise.\n\n\n\n\tJakub","diff":"--- libstdc++-v3/include/std/meta.jj\t2026-03-12 08:50:32.783085576 +0100\n+++ libstdc++-v3/include/std/meta\t2026-03-25 08:14:07.297917425 +0100\n@@ -418,12 +418,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \tinfo _M_unused = {};\n       };\n \n+      info type;\n       optional<_Name> name;\n       optional<int> alignment;\n       optional<int> bit_width;\n       bool no_unique_address = false;\n     };\n-    consteval info data_member_spec(info, data_member_options);\n+    consteval info data_member_spec(data_member_options);\n     consteval bool is_data_member_spec(info);\n     template<reflection_range _Rg = initializer_list<info>>\n       consteval info define_aggregate(info, _Rg&&);\n--- gcc/cp/metafns.gperf.jj\t2026-03-02 07:43:12.343788113 +0100\n+++ gcc/cp/metafns.gperf\t2026-03-24 23:17:05.964011658 +0100\n@@ -315,6 +315,7 @@ enum metafn_kind_args {\n   METAFN_KIND_ARGS_OPERATORS = METAFN_KIND_ARG_OPERATORS,\n   METAFN_KIND_ARGS_TEMPLATE_PARM = METAFN_KIND_ARG_TEMPLATE_PARM,\n   METAFN_KIND_ARGS_TEMPLATE_PARM_REF = METAFN_KIND_ARG_TEMPLATE_PARM_REF,\n+  METAFN_KIND_ARGS_DATA_MEMBER_OPTIONS = METAFN_KIND_ARG_DATA_MEMBER_OPTIONS,\n   METAFN_KIND_ARGS_INFO_INFO\n     = (METAFN_KIND_ARG_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_ARG_INFO,\n   METAFN_KIND_ARGS_TINFO_TINFO\n@@ -325,9 +326,6 @@ enum metafn_kind_args {\n   METAFN_KIND_ARGS_INFO_ACCESS_CONTEXT\n     = (METAFN_KIND_ARG_ACCESS_CONTEXT << METAFN_KIND_SHIFT)\n       | METAFN_KIND_ARG_INFO,\n-  METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS\n-    = (METAFN_KIND_ARG_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n-      | METAFN_KIND_ARG_TINFO,\n   METAFN_KIND_ARGS_INFO_REFLECTION_RANGE\n     = (METAFN_KIND_ARG_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n       | METAFN_KIND_ARG_INFO,\n@@ -370,8 +368,8 @@ enum metafn_kind {\n   METAFN_KIND_INFO_TINFO_REFLECTION_RANGET\n     = (METAFN_KIND_ARGS_TINFO_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n       | METAFN_KIND_RET_INFO,\n-  METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS\n-    = (METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n+  METAFN_KIND_INFO_DATA_MEMBER_OPTIONS\n+    = (METAFN_KIND_ARGS_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n       | METAFN_KIND_RET_INFO,\n   METAFN_KIND_INFO_REFLECTION_RANGET\n     = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n@@ -572,7 +570,7 @@ reflect_object, METAFN_REFLECT_OBJECT, M\n reflect_function, METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,\n reflect_constant_string, METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,\n reflect_constant_array, METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,\n-data_member_spec, METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,\n+data_member_spec, METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_DATA_MEMBER_OPTIONS,\n is_data_member_spec, METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,\n define_aggregate, METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,\n is_void_type, METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,\n--- gcc/cp/reflect.cc.jj\t2026-03-24 11:08:32.156754072 +0100\n+++ gcc/cp/reflect.cc\t2026-03-25 08:15:13.865777063 +0100\n@@ -5549,14 +5549,10 @@ eval_variant_alternative (location_t loc\n \n static tree\n eval_data_member_spec (location_t loc, const constexpr_ctx *ctx,\n-\t\t       tree type, tree opts, bool *non_constant_p,\n+\t\t       tree opts, bool *non_constant_p,\n \t\t       bool *overflow_p, tree *jump_target, tree fun)\n {\n-  type = strip_typedefs (type);\n-  if (!TYPE_OBJ_P (type) && !TYPE_REF_P (type))\n-    return throw_exception (loc, ctx, \"type is not object or reference type\",\n-\t\t\t    fun, non_constant_p, jump_target);\n-  opts = convert_from_reference (opts);\n+  tree type = NULL_TREE;  opts = convert_from_reference (opts);\n   if (!CLASS_TYPE_P (TREE_TYPE (opts)))\n     {\n     fail:\n@@ -5564,12 +5560,14 @@ eval_data_member_spec (location_t loc, c\n       *non_constant_p = true;\n       return NULL_TREE;\n     }\n-  tree args[5] = { type, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };\n+  tree args[5] = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE };\n   for (tree field = next_aggregate_field (TYPE_FIELDS (TREE_TYPE (opts)));\n        field; field = next_aggregate_field (DECL_CHAIN (field)))\n     if (tree name = DECL_NAME (field))\n       {\n-\tif (id_equal (name, \"name\"))\n+\tif (id_equal (name, \"type\"))\n+\t  args[0] = field;\n+\telse if (id_equal (name, \"name\"))\n \t  args[1] = field;\n \telse if (id_equal (name, \"alignment\"))\n \t  args[2] = field;\n@@ -5578,12 +5576,35 @@ eval_data_member_spec (location_t loc, c\n \telse if (id_equal (name, \"no_unique_address\"))\n \t  args[4] = field;\n       }\n-  for (int i = 1; i < 5; ++i)\n+  for (int i = 0; i < 5; ++i)\n     {\n       if (args[i] == NULL_TREE)\n \tgoto fail;\n       tree opt = build3 (COMPONENT_REF, TREE_TYPE (args[i]), opts, args[i],\n \t\t\t NULL_TREE);\n+      if (i == 0)\n+\t{\n+\t  /* The type handling is simple.  */\n+\t  if (!REFLECTION_TYPE_P (TREE_TYPE (opt)))\n+\t    goto fail;\n+\t  opt = cxx_eval_constant_expression (ctx, opt, vc_prvalue,\n+\t\t\t\t\t      non_constant_p, overflow_p,\n+\t\t\t\t\t      jump_target);\n+\t  if (*jump_target || *non_constant_p)\n+\t    return NULL_TREE;\n+\t  if (TREE_CODE (opt) != REFLECT_EXPR)\n+\t    goto fail;\n+\t  args[i] = type = REFLECT_EXPR_HANDLE (opt);\n+\t  if (eval_is_type (type) != boolean_true_node)\n+\t    return throw_exception_nontype (loc, ctx, fun, non_constant_p,\n+\t\t\t\t\t    jump_target);\n+\t  type = strip_typedefs (type);\n+\t  if (!TYPE_OBJ_P (type) && !TYPE_REF_P (type))\n+\t    return throw_exception (loc, ctx,\n+\t\t\t\t    \"type is not object or reference type\",\n+\t\t\t\t    fun, non_constant_p, jump_target);\n+\t  continue;\n+\t}\n       if (i == 4)\n \t{\n \t  /* The no_unique_address handling is simple.  */\n@@ -7457,7 +7478,8 @@ process_metafunction (const constexpr_ct\n       case METAFN_KIND_ARG_UNSIGNED:\n       case METAFN_KIND_ARG_ACCESS_CONTEXT:\n       case METAFN_KIND_ARG_DATA_MEMBER_OPTIONS:\n-\tgcc_assert (argno == 1);\n+\tgcc_assert (argno == (METAFN_KIND_ARG (argno)\n+\t\t\t      != METAFN_KIND_ARG_DATA_MEMBER_OPTIONS));\n \texpr = get_nth_callarg (call, argno);\n \texpr = cxx_eval_constant_expression (ctx, expr, vc_prvalue,\n \t\t\t\t\t     non_constant_p, overflow_p,\n@@ -7748,7 +7770,7 @@ process_metafunction (const constexpr_ct\n       return eval_reflect_constant_array (loc, ctx, call, non_constant_p,\n \t\t\t\t\t  overflow_p, jump_target, fun);\n     case METAFN_DATA_MEMBER_SPEC:\n-      return eval_data_member_spec (loc, ctx, h, expr, non_constant_p,\n+      return eval_data_member_spec (loc, ctx, expr, non_constant_p,\n \t\t\t\t    overflow_p, jump_target, fun);\n     case METAFN_IS_DATA_MEMBER_SPEC:\n       return eval_is_data_member_spec (h, kind);\n--- gcc/cp/metafns.h.jj\t2026-03-02 07:43:12.343788113 +0100\n+++ gcc/cp/metafns.h\t2026-03-24 23:17:21.935350205 +0100\n@@ -343,6 +343,7 @@ enum metafn_kind_args {\n   METAFN_KIND_ARGS_OPERATORS = METAFN_KIND_ARG_OPERATORS,\n   METAFN_KIND_ARGS_TEMPLATE_PARM = METAFN_KIND_ARG_TEMPLATE_PARM,\n   METAFN_KIND_ARGS_TEMPLATE_PARM_REF = METAFN_KIND_ARG_TEMPLATE_PARM_REF,\n+  METAFN_KIND_ARGS_DATA_MEMBER_OPTIONS = METAFN_KIND_ARG_DATA_MEMBER_OPTIONS,\n   METAFN_KIND_ARGS_INFO_INFO\n     = (METAFN_KIND_ARG_INFO << METAFN_KIND_SHIFT) | METAFN_KIND_ARG_INFO,\n   METAFN_KIND_ARGS_TINFO_TINFO\n@@ -353,9 +354,6 @@ enum metafn_kind_args {\n   METAFN_KIND_ARGS_INFO_ACCESS_CONTEXT\n     = (METAFN_KIND_ARG_ACCESS_CONTEXT << METAFN_KIND_SHIFT)\n       | METAFN_KIND_ARG_INFO,\n-  METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS\n-    = (METAFN_KIND_ARG_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n-      | METAFN_KIND_ARG_TINFO,\n   METAFN_KIND_ARGS_INFO_REFLECTION_RANGE\n     = (METAFN_KIND_ARG_REFLECTION_RANGE << METAFN_KIND_SHIFT)\n       | METAFN_KIND_ARG_INFO,\n@@ -398,8 +396,8 @@ enum metafn_kind {\n   METAFN_KIND_INFO_TINFO_REFLECTION_RANGET\n     = (METAFN_KIND_ARGS_TINFO_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n       | METAFN_KIND_RET_INFO,\n-  METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS\n-    = (METAFN_KIND_ARGS_TINFO_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n+  METAFN_KIND_INFO_DATA_MEMBER_OPTIONS\n+    = (METAFN_KIND_ARGS_DATA_MEMBER_OPTIONS << METAFN_KIND_SHIFT)\n       | METAFN_KIND_RET_INFO,\n   METAFN_KIND_INFO_REFLECTION_RANGET\n     = (METAFN_KIND_ARGS_REFLECTION_RANGET << METAFN_KIND_SHIFT)\n@@ -472,7 +470,7 @@ enum metafn_kind {\n     = (METAFN_KIND_ARGS_INPUT_RANGE << METAFN_KIND_SHIFT)\n       | METAFN_KIND_RET_U8STRING_VIEW\n };\n-#line 448 \"metafns.gperf\"\n+#line 446 \"metafns.gperf\"\n struct metafn_info\n {\n   /* A name within \"std::meta::\" (or \"std::meta::access_context::\").  */\n@@ -596,473 +594,473 @@ metafn_lookup::find (const char *str, si\n #endif\n   static const struct metafn_info wordlist[] =\n     {\n-#line 648 \"metafns.gperf\"\n+#line 646 \"metafns.gperf\"\n       {\"rank\", METAFN_RANK, METAFN_KIND_SIZE_T_TINFO,},\n-#line 578 \"metafns.gperf\"\n+#line 576 \"metafns.gperf\"\n       {\"is_void_type\", METAFN_IS_VOID_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 583 \"metafns.gperf\"\n+#line 581 \"metafns.gperf\"\n       {\"is_pointer_type\", METAFN_IS_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 489 \"metafns.gperf\"\n+#line 487 \"metafns.gperf\"\n       {\"is_volatile\", METAFN_IS_VOLATILE, METAFN_KIND_BOOL_INFO,},\n-#line 535 \"metafns.gperf\"\n+#line 533 \"metafns.gperf\"\n       {\"is_value\", METAFN_IS_VALUE, METAFN_KIND_BOOL_INFO,},\n-#line 542 \"metafns.gperf\"\n+#line 540 \"metafns.gperf\"\n       {\"is_base\", METAFN_IS_BASE, METAFN_KIND_BOOL_INFO,},\n-#line 503 \"metafns.gperf\"\n+#line 501 \"metafns.gperf\"\n       {\"is_variable\", METAFN_IS_VARIABLE, METAFN_KIND_BOOL_INFO,},\n-#line 654 \"metafns.gperf\"\n+#line 652 \"metafns.gperf\"\n       {\"is_nothrow_convertible_type\", METAFN_IS_NOTHROW_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 633 \"metafns.gperf\"\n+#line 631 \"metafns.gperf\"\n       {\"is_nothrow_constructible_type\", METAFN_IS_NOTHROW_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 659 \"metafns.gperf\"\n+#line 657 \"metafns.gperf\"\n       {\"is_nothrow_invocable_type\", METAFN_IS_NOTHROW_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 638 \"metafns.gperf\"\n+#line 636 \"metafns.gperf\"\n       {\"is_nothrow_copy_assignable_type\", METAFN_IS_NOTHROW_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 660 \"metafns.gperf\"\n+#line 658 \"metafns.gperf\"\n       {\"is_nothrow_invocable_r_type\", METAFN_IS_NOTHROW_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},\n-#line 635 \"metafns.gperf\"\n+#line 633 \"metafns.gperf\"\n       {\"is_nothrow_copy_constructible_type\", METAFN_IS_NOTHROW_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 651 \"metafns.gperf\"\n+#line 649 \"metafns.gperf\"\n       {\"is_base_of_type\", METAFN_IS_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 639 \"metafns.gperf\"\n+#line 637 \"metafns.gperf\"\n       {\"is_nothrow_move_assignable_type\", METAFN_IS_NOTHROW_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 636 \"metafns.gperf\"\n+#line 634 \"metafns.gperf\"\n       {\"is_nothrow_move_constructible_type\", METAFN_IS_NOTHROW_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 527 \"metafns.gperf\"\n+#line 525 \"metafns.gperf\"\n       {\"is_variable_template\", METAFN_IS_VARIABLE_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 686 \"metafns.gperf\"\n+#line 684 \"metafns.gperf\"\n       {\"variant_size\", METAFN_VARIANT_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 579 \"metafns.gperf\"\n+#line 577 \"metafns.gperf\"\n       {\"is_null_pointer_type\", METAFN_IS_NULL_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 504 \"metafns.gperf\"\n+#line 502 \"metafns.gperf\"\n       {\"is_type\", METAFN_IS_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 472 \"metafns.gperf\"\n+#line 470 \"metafns.gperf\"\n       {\"is_public\", METAFN_IS_PUBLIC, METAFN_KIND_BOOL_INFO,},\n-#line 484 \"metafns.gperf\"\n+#line 482 \"metafns.gperf\"\n       {\"is_noexcept\", METAFN_IS_NOEXCEPT, METAFN_KIND_BOOL_INFO,},\n-#line 567 \"metafns.gperf\"\n+#line 565 \"metafns.gperf\"\n       {\"extract\", METAFN_EXTRACT, METAFN_KIND_TEMPLATE_PARM_INFO,},\n-#line 687 \"metafns.gperf\"\n+#line 685 \"metafns.gperf\"\n       {\"variant_alternative\", METAFN_VARIANT_ALTERNATIVE, METAFN_KIND_INFO_SIZE_T_TINFO,},\n-#line 605 \"metafns.gperf\"\n+#line 603 \"metafns.gperf\"\n       {\"is_polymorphic_type\", METAFN_IS_POLYMORPHIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 474 \"metafns.gperf\"\n+#line 472 \"metafns.gperf\"\n       {\"is_private\", METAFN_IS_PRIVATE, METAFN_KIND_BOOL_INFO,},\n-#line 508 \"metafns.gperf\"\n+#line 506 \"metafns.gperf\"\n       {\"is_function\", METAFN_IS_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 505 \"metafns.gperf\"\n+#line 503 \"metafns.gperf\"\n       {\"is_namespace\", METAFN_IS_NAMESPACE, METAFN_KIND_BOOL_INFO,},\n-#line 656 \"metafns.gperf\"\n+#line 654 \"metafns.gperf\"\n       {\"is_pointer_interconvertible_base_of_type\", METAFN_IS_POINTER_INTERCONVERTIBLE_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 612 \"metafns.gperf\"\n+#line 610 \"metafns.gperf\"\n       {\"is_bounded_array_type\", METAFN_IS_BOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 488 \"metafns.gperf\"\n+#line 486 \"metafns.gperf\"\n       {\"is_const\", METAFN_IS_CONST, METAFN_KIND_BOOL_INFO,},\n-#line 534 \"metafns.gperf\"\n+#line 532 \"metafns.gperf\"\n       {\"is_concept\", METAFN_IS_CONCEPT, METAFN_KIND_BOOL_INFO,},\n-#line 650 \"metafns.gperf\"\n+#line 648 \"metafns.gperf\"\n       {\"is_same_type\", METAFN_IS_SAME_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 558 \"metafns.gperf\"\n+#line 556 \"metafns.gperf\"\n       {\"bases_of\", METAFN_BASES_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 497 \"metafns.gperf\"\n+#line 495 \"metafns.gperf\"\n       {\"has_module_linkage\", METAFN_HAS_MODULE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 526 \"metafns.gperf\"\n+#line 524 \"metafns.gperf\"\n       {\"is_function_template\", METAFN_IS_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 637 \"metafns.gperf\"\n+#line 635 \"metafns.gperf\"\n       {\"is_nothrow_assignable_type\", METAFN_IS_NOTHROW_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 509 \"metafns.gperf\"\n+#line 507 \"metafns.gperf\"\n       {\"is_conversion_function\", METAFN_IS_CONVERSION_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 642 \"metafns.gperf\"\n+#line 640 \"metafns.gperf\"\n       {\"is_nothrow_destructible_type\", METAFN_IS_NOTHROW_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 653 \"metafns.gperf\"\n+#line 651 \"metafns.gperf\"\n       {\"is_convertible_type\", METAFN_IS_CONVERTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 643 \"metafns.gperf\"\n+#line 641 \"metafns.gperf\"\n       {\"is_implicit_lifetime_type\", METAFN_IS_IMPLICIT_LIFETIME_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 525 \"metafns.gperf\"\n+#line 523 \"metafns.gperf\"\n       {\"is_template\", METAFN_IS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 634 \"metafns.gperf\"\n+#line 632 \"metafns.gperf\"\n       {\"is_nothrow_default_constructible_type\", METAFN_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 568 \"metafns.gperf\"\n+#line 566 \"metafns.gperf\"\n       {\"can_substitute\", METAFN_CAN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 530 \"metafns.gperf\"\n+#line 528 \"metafns.gperf\"\n       {\"is_conversion_function_template\", METAFN_IS_CONVERSION_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 461 \"metafns.gperf\"\n+#line 459 \"metafns.gperf\"\n       {\"symbol_of\", METAFN_SYMBOL_OF, METAFN_KIND_STRING_VIEW_OPERATORS,},\n-#line 617 \"metafns.gperf\"\n-      {\"is_copy_constructible_type\", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n #line 615 \"metafns.gperf\"\n+      {\"is_copy_constructible_type\", METAFN_IS_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n+#line 613 \"metafns.gperf\"\n       {\"is_constructible_type\", METAFN_IS_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 495 \"metafns.gperf\"\n+#line 493 \"metafns.gperf\"\n       {\"has_automatic_storage_duration\", METAFN_HAS_AUTOMATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 620 \"metafns.gperf\"\n+#line 618 \"metafns.gperf\"\n       {\"is_copy_assignable_type\", METAFN_IS_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 684 \"metafns.gperf\"\n+#line 682 \"metafns.gperf\"\n       {\"tuple_size\", METAFN_TUPLE_SIZE, METAFN_KIND_SIZE_T_TINFO,},\n-#line 506 \"metafns.gperf\"\n+#line 504 \"metafns.gperf\"\n       {\"is_type_alias\", METAFN_IS_TYPE_ALIAS, METAFN_KIND_BOOL_INFO,},\n-#line 515 \"metafns.gperf\"\n+#line 513 \"metafns.gperf\"\n       {\"is_copy_constructor\", METAFN_IS_COPY_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 551 \"metafns.gperf\"\n+#line 549 \"metafns.gperf\"\n       {\"variable_of\", METAFN_VARIABLE_OF, METAFN_KIND_INFO_INFO,},\n-#line 544 \"metafns.gperf\"\n+#line 542 \"metafns.gperf\"\n       {\"has_parent\", METAFN_HAS_PARENT, METAFN_KIND_BOOL_INFO,},\n-#line 592 \"metafns.gperf\"\n+#line 590 \"metafns.gperf\"\n       {\"is_reflection_type\", METAFN_IS_REFLECTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 595 \"metafns.gperf\"\n+#line 593 \"metafns.gperf\"\n       {\"is_fundamental_type\", METAFN_IS_FUNDAMENTAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 655 \"metafns.gperf\"\n+#line 653 \"metafns.gperf\"\n       {\"is_layout_compatible_type\", METAFN_IS_LAYOUT_COMPATIBLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 566 \"metafns.gperf\"\n+#line 564 \"metafns.gperf\"\n       {\"bit_size_of\", METAFN_BIT_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 518 \"metafns.gperf\"\n+#line 516 \"metafns.gperf\"\n       {\"is_copy_assignment\", METAFN_IS_COPY_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 691 \"metafns.gperf\"\n+#line 689 \"metafns.gperf\"\n       {\"current\", METAFN_ACCESS_CONTEXT_CURRENT, METAFN_KIND_ACCESS_CONTEXT_VOID,},\n-#line 678 \"metafns.gperf\"\n+#line 676 \"metafns.gperf\"\n       {\"common_type\", METAFN_COMMON_TYPE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n-#line 533 \"metafns.gperf\"\n+#line 531 \"metafns.gperf\"\n       {\"is_constructor_template\", METAFN_IS_CONSTRUCTOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 688 \"metafns.gperf\"\n+#line 686 \"metafns.gperf\"\n       {\"type_order\", METAFN_TYPE_ORDER, METAFN_KIND_STRONG_ORDERING_TINFO_TINFO,},\n-#line 679 \"metafns.gperf\"\n+#line 677 \"metafns.gperf\"\n       {\"common_reference\", METAFN_COMMON_REFERENCE, METAFN_KIND_INFO_REFLECTION_RANGET,},\n-#line 543 \"metafns.gperf\"\n+#line 541 \"metafns.gperf\"\n       {\"has_default_member_initializer\", METAFN_HAS_DEFAULT_MEMBER_INITIALIZER, METAFN_KIND_BOOL_INFO,},\n-#line 685 \"metafns.gperf\"\n+#line 683 \"metafns.gperf\"\n       {\"tuple_element\", METAFN_TUPLE_ELEMENT, METAFN_KIND_INFO_SIZE_T_TINFO,},\n-#line 572 \"metafns.gperf\"\n+#line 570 \"metafns.gperf\"\n       {\"reflect_function\", METAFN_REFLECT_FUNCTION, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n-#line 523 \"metafns.gperf\"\n+#line 521 \"metafns.gperf\"\n       {\"has_default_argument\", METAFN_HAS_DEFAULT_ARGUMENT, METAFN_KIND_BOOL_INFO,},\n-#line 618 \"metafns.gperf\"\n+#line 616 \"metafns.gperf\"\n       {\"is_move_constructible_type\", METAFN_IS_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 469 \"metafns.gperf\"\n+#line 467 \"metafns.gperf\"\n       {\"type_of\", METAFN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n-#line 513 \"metafns.gperf\"\n+#line 511 \"metafns.gperf\"\n       {\"is_constructor\", METAFN_IS_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 623 \"metafns.gperf\"\n+#line 621 \"metafns.gperf\"\n       {\"is_swappable_type\", METAFN_IS_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 641 \"metafns.gperf\"\n+#line 639 \"metafns.gperf\"\n       {\"is_nothrow_swappable_type\", METAFN_IS_NOTHROW_SWAPPABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 593 \"metafns.gperf\"\n+#line 591 \"metafns.gperf\"\n       {\"is_reference_type\", METAFN_IS_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 500 \"metafns.gperf\"\n+#line 498 \"metafns.gperf\"\n       {\"has_linkage\", METAFN_HAS_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 640 \"metafns.gperf\"\n+#line 638 \"metafns.gperf\"\n       {\"is_nothrow_swappable_with_type\", METAFN_IS_NOTHROW_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 599 \"metafns.gperf\"\n+#line 597 \"metafns.gperf\"\n       {\"is_member_pointer_type\", METAFN_IS_MEMBER_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 621 \"metafns.gperf\"\n+#line 619 \"metafns.gperf\"\n       {\"is_move_assignable_type\", METAFN_IS_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 524 \"metafns.gperf\"\n+#line 522 \"metafns.gperf\"\n       {\"has_ellipsis_parameter\", METAFN_HAS_ELLIPSIS_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 516 \"metafns.gperf\"\n+#line 514 \"metafns.gperf\"\n       {\"is_move_constructor\", METAFN_IS_MOVE_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 550 \"metafns.gperf\"\n+#line 548 \"metafns.gperf\"\n       {\"parameters_of\", METAFN_PARAMETERS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 564 \"metafns.gperf\"\n+#line 562 \"metafns.gperf\"\n       {\"size_of\", METAFN_SIZE_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 519 \"metafns.gperf\"\n+#line 517 \"metafns.gperf\"\n       {\"is_move_assignment\", METAFN_IS_MOVE_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 619 \"metafns.gperf\"\n+#line 617 \"metafns.gperf\"\n       {\"is_assignable_type\", METAFN_IS_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 538 \"metafns.gperf\"\n+#line 536 \"metafns.gperf\"\n       {\"is_class_member\", METAFN_IS_CLASS_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 602 \"metafns.gperf\"\n+#line 600 \"metafns.gperf\"\n       {\"is_trivially_copyable_type\", METAFN_IS_TRIVIALLY_COPYABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 517 \"metafns.gperf\"\n+#line 515 \"metafns.gperf\"\n       {\"is_assignment\", METAFN_IS_ASSIGNMENT, METAFN_KIND_BOOL_INFO,},\n-#line 539 \"metafns.gperf\"\n+#line 537 \"metafns.gperf\"\n       {\"is_namespace_member\", METAFN_IS_NAMESPACE_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 557 \"metafns.gperf\"\n+#line 555 \"metafns.gperf\"\n       {\"members_of\", METAFN_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 625 \"metafns.gperf\"\n+#line 623 \"metafns.gperf\"\n       {\"is_trivially_constructible_type\", METAFN_IS_TRIVIALLY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 630 \"metafns.gperf\"\n+#line 628 \"metafns.gperf\"\n       {\"is_trivially_copy_assignable_type\", METAFN_IS_TRIVIALLY_COPY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 627 \"metafns.gperf\"\n+#line 625 \"metafns.gperf\"\n       {\"is_trivially_copy_constructible_type\", METAFN_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 649 \"metafns.gperf\"\n+#line 647 \"metafns.gperf\"\n       {\"extent\", METAFN_EXTENT, METAFN_KIND_SIZE_T_TINFO_UNSIGNED,},\n-#line 588 \"metafns.gperf\"\n+#line 586 \"metafns.gperf\"\n       {\"is_enum_type\", METAFN_IS_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 548 \"metafns.gperf\"\n+#line 546 \"metafns.gperf\"\n       {\"template_of\", METAFN_TEMPLATE_OF, METAFN_KIND_INFO_INFO,},\n-#line 528 \"metafns.gperf\"\n+#line 526 \"metafns.gperf\"\n       {\"is_class_template\", METAFN_IS_CLASS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 512 \"metafns.gperf\"\n+#line 510 \"metafns.gperf\"\n       {\"is_special_member_function\", METAFN_IS_SPECIAL_MEMBER_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 473 \"metafns.gperf\"\n+#line 471 \"metafns.gperf\"\n       {\"is_protected\", METAFN_IS_PROTECTED, METAFN_KIND_BOOL_INFO,},\n-#line 540 \"metafns.gperf\"\n+#line 538 \"metafns.gperf\"\n       {\"is_nonstatic_data_member\", METAFN_IS_NONSTATIC_DATA_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 682 \"metafns.gperf\"\n+#line 680 \"metafns.gperf\"\n       {\"unwrap_reference\", METAFN_UNWRAP_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 502 \"metafns.gperf\"\n+#line 500 \"metafns.gperf\"\n       {\"is_enumerable_type\", METAFN_IS_ENUMERABLE_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 594 \"metafns.gperf\"\n+#line 592 \"metafns.gperf\"\n       {\"is_arithmetic_type\", METAFN_IS_ARITHMETIC_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 545 \"metafns.gperf\"\n+#line 543 \"metafns.gperf\"\n       {\"parent_of\", METAFN_PARENT_OF, METAFN_KIND_INFO_INFO,},\n-#line 476 \"metafns.gperf\"\n+#line 474 \"metafns.gperf\"\n       {\"is_pure_virtual\", METAFN_IS_PURE_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n-#line 675 \"metafns.gperf\"\n+#line 673 \"metafns.gperf\"\n       {\"add_pointer\", METAFN_ADD_POINTER, METAFN_KIND_INFO_TINFO,},\n-#line 616 \"metafns.gperf\"\n+#line 614 \"metafns.gperf\"\n       {\"is_default_constructible_type\", METAFN_IS_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 680 \"metafns.gperf\"\n+#line 678 \"metafns.gperf\"\n       {\"underlying_type\", METAFN_UNDERLYING_TYPE, METAFN_KIND_INFO_TINFO,},\n-#line 521 \"metafns.gperf\"\n+#line 519 \"metafns.gperf\"\n       {\"is_function_parameter\", METAFN_IS_FUNCTION_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 464 \"metafns.gperf\"\n+#line 462 \"metafns.gperf\"\n       {\"identifier_of\", METAFN_IDENTIFIER_OF, METAFN_KIND_STRING_VIEW_INFO,},\n-#line 597 \"metafns.gperf\"\n+#line 595 \"metafns.gperf\"\n       {\"is_scalar_type\", METAFN_IS_SCALAR_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 669 \"metafns.gperf\"\n+#line 667 \"metafns.gperf\"\n       {\"add_rvalue_reference\", METAFN_ADD_RVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 490 \"metafns.gperf\"\n+#line 488 \"metafns.gperf\"\n       {\"is_mutable_member\", METAFN_IS_MUTABLE_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 507 \"metafns.gperf\"\n+#line 505 \"metafns.gperf\"\n       {\"is_namespace_alias\", METAFN_IS_NAMESPACE_ALIAS, METAFN_KIND_BOOL_INFO,},\n-#line 631 \"metafns.gperf\"\n+#line 629 \"metafns.gperf\"\n       {\"is_trivially_move_assignable_type\", METAFN_IS_TRIVIALLY_MOVE_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 628 \"metafns.gperf\"\n+#line 626 \"metafns.gperf\"\n       {\"is_trivially_move_constructible_type\", METAFN_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 514 \"metafns.gperf\"\n+#line 512 \"metafns.gperf\"\n       {\"is_default_constructor\", METAFN_IS_DEFAULT_CONSTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 486 \"metafns.gperf\"\n+#line 484 \"metafns.gperf\"\n       {\"is_enumerator\", METAFN_IS_ENUMERATOR, METAFN_KIND_BOOL_INFO,},\n-#line 536 \"metafns.gperf\"\n+#line 534 \"metafns.gperf\"\n       {\"is_object\", METAFN_IS_OBJECT, METAFN_KIND_BOOL_INFO,},\n-#line 608 \"metafns.gperf\"\n+#line 606 \"metafns.gperf\"\n       {\"is_aggregate_type\", METAFN_IS_AGGREGATE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 520 \"metafns.gperf\"\n+#line 518 \"metafns.gperf\"\n       {\"is_destructor\", METAFN_IS_DESTRUCTOR, METAFN_KIND_BOOL_INFO,},\n-#line 587 \"metafns.gperf\"\n+#line 585 \"metafns.gperf\"\n       {\"is_member_function_pointer_type\", METAFN_IS_MEMBER_FUNCTION_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 596 \"metafns.gperf\"\n+#line 594 \"metafns.gperf\"\n       {\"is_object_type\", METAFN_IS_OBJECT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 569 \"metafns.gperf\"\n+#line 567 \"metafns.gperf\"\n       {\"substitute\", METAFN_SUBSTITUTE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 585 \"metafns.gperf\"\n+#line 583 \"metafns.gperf\"\n       {\"is_rvalue_reference_type\", METAFN_IS_RVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 666 \"metafns.gperf\"\n+#line 664 \"metafns.gperf\"\n       {\"add_cv\", METAFN_ADD_CV, METAFN_KIND_INFO_TINFO,},\n-#line 570 \"metafns.gperf\"\n+#line 568 \"metafns.gperf\"\n       {\"reflect_constant\", METAFN_REFLECT_CONSTANT, METAFN_KIND_INFO_TEMPLATE_PARM,},\n-#line 629 \"metafns.gperf\"\n+#line 627 \"metafns.gperf\"\n       {\"is_trivially_assignable_type\", METAFN_IS_TRIVIALLY_ASSIGNABLE_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 475 \"metafns.gperf\"\n+#line 473 \"metafns.gperf\"\n       {\"is_virtual\", METAFN_IS_VIRTUAL, METAFN_KIND_BOOL_INFO,},\n-#line 493 \"metafns.gperf\"\n+#line 491 \"metafns.gperf\"\n       {\"has_static_storage_duration\", METAFN_HAS_STATIC_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 668 \"metafns.gperf\"\n+#line 666 \"metafns.gperf\"\n       {\"add_lvalue_reference\", METAFN_ADD_LVALUE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 584 \"metafns.gperf\"\n+#line 582 \"metafns.gperf\"\n       {\"is_lvalue_reference_type\", METAFN_IS_LVALUE_REFERENCE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 562 \"metafns.gperf\"\n+#line 560 \"metafns.gperf\"\n       {\"enumerators_of\", METAFN_ENUMERATORS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 624 \"metafns.gperf\"\n+#line 622 \"metafns.gperf\"\n       {\"is_destructible_type\", METAFN_IS_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 549 \"metafns.gperf\"\n+#line 547 \"metafns.gperf\"\n       {\"template_arguments_of\", METAFN_TEMPLATE_ARGUMENTS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 657 \"metafns.gperf\"\n+#line 655 \"metafns.gperf\"\n       {\"is_invocable_type\", METAFN_IS_INVOCABLE_TYPE, METAFN_KIND_BOOL_TINFO_REFLECTION_RANGET,},\n-#line 664 \"metafns.gperf\"\n+#line 662 \"metafns.gperf\"\n       {\"add_const\", METAFN_ADD_CONST, METAFN_KIND_INFO_TINFO,},\n-#line 529 \"metafns.gperf\"\n+#line 527 \"metafns.gperf\"\n       {\"is_alias_template\", METAFN_IS_ALIAS_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 604 \"metafns.gperf\"\n+#line 602 \"metafns.gperf\"\n       {\"is_empty_type\", METAFN_IS_EMPTY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 632 \"metafns.gperf\"\n+#line 630 \"metafns.gperf\"\n       {\"is_trivially_destructible_type\", METAFN_IS_TRIVIALLY_DESTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 498 \"metafns.gperf\"\n+#line 496 \"metafns.gperf\"\n       {\"has_external_linkage\", METAFN_HAS_EXTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 553 \"metafns.gperf\"\n+#line 551 \"metafns.gperf\"\n       {\"is_accessible\", METAFN_IS_ACCESSIBLE, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 658 \"metafns.gperf\"\n+#line 656 \"metafns.gperf\"\n       {\"is_invocable_r_type\", METAFN_IS_INVOCABLE_R_TYPE, METAFN_KIND_BOOL_TINFO_TINFO_REFLECTION_RANGET,},\n-#line 652 \"metafns.gperf\"\n+#line 650 \"metafns.gperf\"\n       {\"is_virtual_base_of_type\", METAFN_IS_VIRTUAL_BASE_OF_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 601 \"metafns.gperf\"\n+#line 599 \"metafns.gperf\"\n       {\"is_volatile_type\", METAFN_IS_VOLATILE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 573 \"metafns.gperf\"\n+#line 571 \"metafns.gperf\"\n       {\"reflect_constant_string\", METAFN_REFLECT_CONSTANT_STRING, METAFN_KIND_INFO_INPUT_RANGE,},\n-#line 626 \"metafns.gperf\"\n+#line 624 \"metafns.gperf\"\n       {\"is_trivially_default_constructible_type\", METAFN_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 532 \"metafns.gperf\"\n+#line 530 \"metafns.gperf\"\n       {\"is_literal_operator_template\", METAFN_IS_LITERAL_OPERATOR_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 460 \"metafns.gperf\"\n+#line 458 \"metafns.gperf\"\n       {\"operator_of\", METAFN_OPERATOR_OF, METAFN_KIND_OPERATORS_INFO,},\n-#line 610 \"metafns.gperf\"\n+#line 608 \"metafns.gperf\"\n       {\"is_signed_type\", METAFN_IS_SIGNED_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 614 \"metafns.gperf\"\n+#line 612 \"metafns.gperf\"\n       {\"is_scoped_enum_type\", METAFN_IS_SCOPED_ENUM_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 622 \"metafns.gperf\"\n+#line 620 \"metafns.gperf\"\n       {\"is_swappable_with_type\", METAFN_IS_SWAPPABLE_WITH_TYPE, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 561 \"metafns.gperf\"\n+#line 559 \"metafns.gperf\"\n       {\"subobjects_of\", METAFN_SUBOBJECTS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 563 \"metafns.gperf\"\n+#line 561 \"metafns.gperf\"\n       {\"offset_of\", METAFN_OFFSET_OF, METAFN_KIND_MEMBER_OFFSET_INFO,},\n-#line 537 \"metafns.gperf\"\n+#line 535 \"metafns.gperf\"\n       {\"is_structured_binding\", METAFN_IS_STRUCTURED_BINDING, METAFN_KIND_BOOL_INFO,},\n-#line 478 \"metafns.gperf\"\n+#line 476 \"metafns.gperf\"\n       {\"is_final\", METAFN_IS_FINAL, METAFN_KIND_BOOL_INFO,},\n-#line 511 \"metafns.gperf\"\n+#line 509 \"metafns.gperf\"\n       {\"is_literal_operator\", METAFN_IS_LITERAL_OPERATOR, METAFN_KIND_BOOL_INFO,},\n-#line 671 \"metafns.gperf\"\n+#line 669 \"metafns.gperf\"\n       {\"make_unsigned\", METAFN_MAKE_UNSIGNED, METAFN_KIND_INFO_TINFO,},\n-#line 467 \"metafns.gperf\"\n+#line 465 \"metafns.gperf\"\n       {\"u8display_string_of\", METAFN_U8DISPLAY_STRING_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n-#line 644 \"metafns.gperf\"\n+#line 642 \"metafns.gperf\"\n       {\"has_virtual_destructor\", METAFN_HAS_VIRTUAL_DESTRUCTOR, METAFN_KIND_BOOL_TINFO,},\n-#line 600 \"metafns.gperf\"\n+#line 598 \"metafns.gperf\"\n       {\"is_const_type\", METAFN_IS_CONST_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 483 \"metafns.gperf\"\n+#line 481 \"metafns.gperf\"\n       {\"is_explicit\", METAFN_IS_EXPLICIT, METAFN_KIND_BOOL_INFO,},\n-#line 576 \"metafns.gperf\"\n+#line 574 \"metafns.gperf\"\n       {\"is_data_member_spec\", METAFN_IS_DATA_MEMBER_SPEC, METAFN_KIND_BOOL_INFO,},\n-#line 501 \"metafns.gperf\"\n+#line 499 \"metafns.gperf\"\n       {\"is_complete_type\", METAFN_IS_COMPLETE_TYPE, METAFN_KIND_BOOL_INFO,},\n-#line 487 \"metafns.gperf\"\n+#line 485 \"metafns.gperf\"\n       {\"is_annotation\", METAFN_IS_ANNOTATION, METAFN_KIND_BOOL_INFO,},\n-#line 591 \"metafns.gperf\"\n+#line 589 \"metafns.gperf\"\n       {\"is_function_type\", METAFN_IS_FUNCTION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 552 \"metafns.gperf\"\n+#line 550 \"metafns.gperf\"\n       {\"return_type_of\", METAFN_RETURN_TYPE_OF, METAFN_KIND_INFO_INFO,},\n-#line 479 \"metafns.gperf\"\n+#line 477 \"metafns.gperf\"\n       {\"is_deleted\", METAFN_IS_DELETED, METAFN_KIND_BOOL_INFO,},\n-#line 471 \"metafns.gperf\"\n+#line 469 \"metafns.gperf\"\n       {\"constant_of\", METAFN_CONSTANT_OF, METAFN_KIND_INFO_INFO,},\n-#line 665 \"metafns.gperf\"\n+#line 663 \"metafns.gperf\"\n       {\"add_volatile\", METAFN_ADD_VOLATILE, METAFN_KIND_INFO_TINFO,},\n-#line 480 \"metafns.gperf\"\n+#line 478 \"metafns.gperf\"\n       {\"is_defaulted\", METAFN_IS_DEFAULTED, METAFN_KIND_BOOL_INFO,},\n-#line 645 \"metafns.gperf\"\n+#line 643 \"metafns.gperf\"\n       {\"has_unique_object_representations\", METAFN_HAS_UNIQUE_OBJECT_REPRESENTATIONS, METAFN_KIND_BOOL_TINFO,},\n-#line 586 \"metafns.gperf\"\n+#line 584 \"metafns.gperf\"\n       {\"is_member_object_pointer_type\", METAFN_IS_MEMBER_OBJECT_POINTER_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 466 \"metafns.gperf\"\n+#line 464 \"metafns.gperf\"\n       {\"display_string_of\", METAFN_DISPLAY_STRING_OF, METAFN_KIND_STRING_VIEW_INFO,},\n-#line 522 \"metafns.gperf\"\n+#line 520 \"metafns.gperf\"\n       {\"is_explicit_object_parameter\", METAFN_IS_EXPLICIT_OBJECT_PARAMETER, METAFN_KIND_BOOL_INFO,},\n-#line 541 \"metafns.gperf\"\n+#line 539 \"metafns.gperf\"\n       {\"is_static_member\", METAFN_IS_STATIC_MEMBER, METAFN_KIND_BOOL_INFO,},\n-#line 470 \"metafns.gperf\"\n+#line 468 \"metafns.gperf\"\n       {\"object_of\", METAFN_OBJECT_OF, METAFN_KIND_INFO_INFO,},\n-#line 609 \"metafns.gperf\"\n+#line 607 \"metafns.gperf\"\n       {\"is_consteval_only_type\", METAFN_IS_CONSTEVAL_ONLY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 477 \"metafns.gperf\"\n+#line 475 \"metafns.gperf\"\n       {\"is_override\", METAFN_IS_OVERRIDE, METAFN_KIND_BOOL_INFO,},\n-#line 663 \"metafns.gperf\"\n+#line 661 \"metafns.gperf\"\n       {\"remove_cv\", METAFN_REMOVE_CV, METAFN_KIND_INFO_TINFO,},\n-#line 571 \"metafns.gperf\"\n+#line 569 \"metafns.gperf\"\n       {\"reflect_object\", METAFN_REFLECT_OBJECT, METAFN_KIND_INFO_TEMPLATE_PARM_REF,},\n-#line 581 \"metafns.gperf\"\n+#line 579 \"metafns.gperf\"\n       {\"is_floating_point_type\", METAFN_IS_FLOATING_POINT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 463 \"metafns.gperf\"\n+#line 461 \"metafns.gperf\"\n       {\"has_identifier\", METAFN_HAS_IDENTIFIER, METAFN_KIND_BOOL_INFO,},\n-#line 667 \"metafns.gperf\"\n+#line 665 \"metafns.gperf\"\n       {\"remove_reference\", METAFN_REMOVE_REFERENCE, METAFN_KIND_INFO_TINFO,},\n-#line 555 \"metafns.gperf\"\n+#line 553 \"metafns.gperf\"\n       {\"has_inaccessible_bases\", METAFN_HAS_INACCESSIBLE_BASES, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 499 \"metafns.gperf\"\n+#line 497 \"metafns.gperf\"\n       {\"has_c_language_linkage\", METAFN_HAS_C_LANGUAGE_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 556 \"metafns.gperf\"\n+#line 554 \"metafns.gperf\"\n       {\"has_inaccessible_subobjects\", METAFN_HAS_INACCESSIBLE_SUBOBJECTS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 672 \"metafns.gperf\"\n+#line 670 \"metafns.gperf\"\n       {\"remove_extent\", METAFN_REMOVE_EXTENT, METAFN_KIND_INFO_TINFO,},\n-#line 554 \"metafns.gperf\"\n+#line 552 \"metafns.gperf\"\n       {\"has_inaccessible_nonstatic_data_members\", METAFN_HAS_INACCESSIBLE_NONSTATIC_DATA_MEMBERS, METAFN_KIND_BOOL_INFO_ACCESS_CONTEXT,},\n-#line 492 \"metafns.gperf\"\n+#line 490 \"metafns.gperf\"\n       {\"is_rvalue_reference_qualified\", METAFN_IS_RVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n-#line 647 \"metafns.gperf\"\n+#line 645 \"metafns.gperf\"\n       {\"reference_converts_from_temporary\", METAFN_REFERENCE_CONVERTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 590 \"metafns.gperf\"\n+#line 588 \"metafns.gperf\"\n       {\"is_class_type\", METAFN_IS_CLASS_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 482 \"metafns.gperf\"\n+#line 480 \"metafns.gperf\"\n       {\"is_user_declared\", METAFN_IS_USER_DECLARED, METAFN_KIND_BOOL_INFO,},\n-#line 575 \"metafns.gperf\"\n-      {\"data_member_spec\", METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_TINFO_DATA_MEMBER_OPTIONS,},\n-#line 491 \"metafns.gperf\"\n+#line 573 \"metafns.gperf\"\n+      {\"data_member_spec\", METAFN_DATA_MEMBER_SPEC, METAFN_KIND_INFO_DATA_MEMBER_OPTIONS,},\n+#line 489 \"metafns.gperf\"\n       {\"is_lvalue_reference_qualified\", METAFN_IS_LVALUE_REFERENCE_QUALIFIED, METAFN_KIND_BOOL_INFO,},\n-#line 494 \"metafns.gperf\"\n+#line 492 \"metafns.gperf\"\n       {\"has_thread_storage_duration\", METAFN_HAS_THREAD_STORAGE_DURATION, METAFN_KIND_BOOL_INFO,},\n-#line 485 \"metafns.gperf\"\n+#line 483 \"metafns.gperf\"\n       {\"is_bit_field\", METAFN_IS_BIT_FIELD, METAFN_KIND_BOOL_INFO,},\n-#line 676 \"metafns.gperf\"\n+#line 674 \"metafns.gperf\"\n       {\"remove_cvref\", METAFN_REMOVE_CVREF, METAFN_KIND_INFO_TINFO,},\n-#line 681 \"metafns.gperf\"\n+#line 679 \"metafns.gperf\"\n       {\"invoke_result\", METAFN_INVOKE_RESULT, METAFN_KIND_INFO_TINFO_REFLECTION_RANGET,},\n-#line 547 \"metafns.gperf\"\n+#line 545 \"metafns.gperf\"\n       {\"has_template_arguments\", METAFN_HAS_TEMPLATE_ARGUMENTS, METAFN_KIND_BOOL_INFO,},\n-#line 510 \"metafns.gperf\"\n+#line 508 \"metafns.gperf\"\n       {\"is_operator_function\", METAFN_IS_OPERATOR_FUNCTION, METAFN_KIND_BOOL_INFO,},\n-#line 674 \"metafns.gperf\"\n+#line 672 \"metafns.gperf\"\n       {\"remove_pointer\", METAFN_REMOVE_POINTER, METAFN_KIND_INFO_TINFO,},\n-#line 546 \"metafns.gperf\"\n+#line 544 \"metafns.gperf\"\n       {\"dealias\", METAFN_DEALIAS, METAFN_KIND_INFO_INFO,},\n-#line 661 \"metafns.gperf\"\n+#line 659 \"metafns.gperf\"\n       {\"remove_const\", METAFN_REMOVE_CONST, METAFN_KIND_INFO_TINFO,},\n-#line 531 \"metafns.gperf\"\n+#line 529 \"metafns.gperf\"\n       {\"is_operator_function_template\", METAFN_IS_OPERATOR_FUNCTION_TEMPLATE, METAFN_KIND_BOOL_INFO,},\n-#line 646 \"metafns.gperf\"\n+#line 644 \"metafns.gperf\"\n       {\"reference_constructs_from_temporary\", METAFN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY, METAFN_KIND_BOOL_TINFO_TINFO,},\n-#line 673 \"metafns.gperf\"\n+#line 671 \"metafns.gperf\"\n       {\"remove_all_extents\", METAFN_REMOVE_ALL_EXTENTS, METAFN_KIND_INFO_TINFO,},\n-#line 582 \"metafns.gperf\"\n+#line 580 \"metafns.gperf\"\n       {\"is_array_type\", METAFN_IS_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 496 \"metafns.gperf\"\n+#line 494 \"metafns.gperf\"\n       {\"has_internal_linkage\", METAFN_HAS_INTERNAL_LINKAGE, METAFN_KIND_BOOL_INFO,},\n-#line 670 \"metafns.gperf\"\n+#line 668 \"metafns.gperf\"\n       {\"make_signed\", METAFN_MAKE_SIGNED, METAFN_KIND_INFO_TINFO,},\n-#line 559 \"metafns.gperf\"\n+#line 557 \"metafns.gperf\"\n       {\"static_data_members_of\", METAFN_STATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 598 \"metafns.gperf\"\n+#line 596 \"metafns.gperf\"\n       {\"is_compound_type\", METAFN_IS_COMPOUND_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 606 \"metafns.gperf\"\n+#line 604 \"metafns.gperf\"\n       {\"is_abstract_type\", METAFN_IS_ABSTRACT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 577 \"metafns.gperf\"\n+#line 575 \"metafns.gperf\"\n       {\"define_aggregate\", METAFN_DEFINE_AGGREGATE, METAFN_KIND_INFO_INFO_REFLECTION_RANGE,},\n-#line 692 \"metafns.gperf\"\n+#line 690 \"metafns.gperf\"\n       {\"_S_exception_cvt_to_utf8\", METAFN_EXCEPTION__S_EXCEPTION_CVT_TO_UTF8, METAFN_KIND_U8STRING_VIEW_INPUT_RANGE,},\n-#line 693 \"metafns.gperf\"\n+#line 691 \"metafns.gperf\"\n       {\"_S_exception_cvt_from_utf8\", METAFN_EXCEPTION__S_EXCEPTION_CVT_FROM_UTF8, METAFN_KIND_STRING_VIEW_INPUT_RANGE,},\n-#line 613 \"metafns.gperf\"\n+#line 611 \"metafns.gperf\"\n       {\"is_unbounded_array_type\", METAFN_IS_UNBOUNDED_ARRAY_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 603 \"metafns.gperf\"\n+#line 601 \"metafns.gperf\"\n       {\"is_standard_layout_type\", METAFN_IS_STANDARD_LAYOUT_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 683 \"metafns.gperf\"\n+#line 681 \"metafns.gperf\"\n       {\"unwrap_ref_decay\", METAFN_UNWRAP_REF_DECAY, METAFN_KIND_INFO_TINFO,},\n-#line 574 \"metafns.gperf\"\n+#line 572 \"metafns.gperf\"\n       {\"reflect_constant_array\", METAFN_REFLECT_CONSTANT_ARRAY, METAFN_KIND_INFO_INPUT_RANGE,},\n-#line 462 \"metafns.gperf\"\n+#line 460 \"metafns.gperf\"\n       {\"u8symbol_of\", METAFN_U8SYMBOL_OF, METAFN_KIND_U8STRING_VIEW_OPERATORS,},\n-#line 580 \"metafns.gperf\"\n+#line 578 \"metafns.gperf\"\n       {\"is_integral_type\", METAFN_IS_INTEGRAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 560 \"metafns.gperf\"\n+#line 558 \"metafns.gperf\"\n       {\"nonstatic_data_members_of\", METAFN_NONSTATIC_DATA_MEMBERS_OF, METAFN_KIND_VECTOR_INFO_INFO_ACCESS_CONTEXT,},\n-#line 677 \"metafns.gperf\"\n+#line 675 \"metafns.gperf\"\n       {\"decay\", METAFN_DECAY, METAFN_KIND_INFO_TINFO,},\n-#line 607 \"metafns.gperf\"\n+#line 605 \"metafns.gperf\"\n       {\"is_final_type\", METAFN_IS_FINAL_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 662 \"metafns.gperf\"\n+#line 660 \"metafns.gperf\"\n       {\"remove_volatile\", METAFN_REMOVE_VOLATILE, METAFN_KIND_INFO_TINFO,},\n-#line 565 \"metafns.gperf\"\n+#line 563 \"metafns.gperf\"\n       {\"alignment_of\", METAFN_ALIGNMENT_OF, METAFN_KIND_SIZE_T_INFO,},\n-#line 468 \"metafns.gperf\"\n+#line 466 \"metafns.gperf\"\n       {\"source_location_of\", METAFN_SOURCE_LOCATION_OF, METAFN_KIND_SOURCE_LOCATION_INFO,},\n-#line 690 \"metafns.gperf\"\n+#line 688 \"metafns.gperf\"\n       {\"annotations_of_with_type\", METAFN_ANNOTATIONS_OF_WITH_TYPE, METAFN_KIND_VECTOR_INFO_INFO_INFO,},\n-#line 465 \"metafns.gperf\"\n+#line 463 \"metafns.gperf\"\n       {\"u8identifier_of\", METAFN_U8IDENTIFIER_OF, METAFN_KIND_U8STRING_VIEW_INFO,},\n-#line 689 \"metafns.gperf\"\n+#line 687 \"metafns.gperf\"\n       {\"annotations_of\", METAFN_ANNOTATIONS_OF, METAFN_KIND_VECTOR_INFO_INFO,},\n-#line 589 \"metafns.gperf\"\n+#line 587 \"metafns.gperf\"\n       {\"is_union_type\", METAFN_IS_UNION_TYPE, METAFN_KIND_BOOL_TINFO,},\n-#line 481 \"metafns.gperf\"\n+#line 479 \"metafns.gperf\"\n       {\"is_user_provided\", METAFN_IS_USER_PROVIDED, METAFN_KIND_BOOL_INFO,},\n-#line 611 \"metafns.gperf\"\n+#line 609 \"metafns.gperf\"\n       {\"is_unsigned_type\", METAFN_IS_UNSIGNED_TYPE, METAFN_KIND_BOOL_TINFO,}\n     };\n #if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined __clang__ && __clang_major__ >= 3)\n--- gcc/testsuite/g++.dg/reflect/alignment_of1.C.jj\t2026-01-15 16:33:47.004726583 +0100\n+++ gcc/testsuite/g++.dg/reflect/alignment_of1.C\t2026-03-24 23:13:58.377821666 +0100\n@@ -77,9 +77,9 @@ static_assert (!has_alignment_of (^^Conc\n static_assert (!has_alignment_of (^^NSAlias));\n static_assert (!has_alignment_of (^^NS));\n static_assert (has_alignment_of (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (has_alignment_of (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n-static_assert (!has_alignment_of (std::meta::data_member_spec (^^int, { .name = \"member\", .bit_width = 6 })));\n-static_assert (!has_alignment_of (std::meta::data_member_spec (^^int, { .bit_width = 15 })));\n+static_assert (has_alignment_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n+static_assert (!has_alignment_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\", .bit_width = 6 })));\n+static_assert (!has_alignment_of (std::meta::data_member_spec ({ .type = ^^int, .bit_width = 15 })));\n static_assert (has_alignment_of (^^arr2));\n static_assert (has_alignment_of (^^arr3));\n static_assert (!has_alignment_of (^^ref));\n@@ -92,7 +92,7 @@ static_assert (alignment_of (^^Alias) ==\n static_assert (alignment_of (^^S) == alignof (S));\n static_assert (alignment_of (^^S::mem) == offsetof (S2, mem));\n static_assert (alignment_of (std::meta::bases_of (^^S, ctx)[0]) == alignof (B));\n-static_assert (alignment_of (std::meta::data_member_spec (^^int, { .name = \"member\" })) == alignof (int));\n+static_assert (alignment_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })) == alignof (int));\n static_assert (alignment_of (^^arr3) >= alignof (int));\n static_assert (alignment_of (^^arr5) == 64);\n static_assert (alignment_of (^^T::ta) >= alignof (int));\n--- gcc/testsuite/g++.dg/reflect/bit_size_of1.C.jj\t2026-01-15 16:33:47.004726583 +0100\n+++ gcc/testsuite/g++.dg/reflect/bit_size_of1.C\t2026-03-24 23:13:58.380840618 +0100\n@@ -64,8 +64,8 @@ static_assert (!has_bit_size_of (^^Conce\n static_assert (!has_bit_size_of (^^NSAlias));\n static_assert (!has_bit_size_of (^^NS));\n static_assert (has_bit_size_of (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (has_bit_size_of (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n-static_assert (has_bit_size_of (std::meta::data_member_spec (^^int, { .name = \"member2\", .bit_width = 6 })));\n+static_assert (has_bit_size_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n+static_assert (has_bit_size_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member2\", .bit_width = 6 })));\n static_assert (!has_bit_size_of (^^arr2));\n static_assert (has_bit_size_of (^^arr3));\n static_assert (!has_bit_size_of (^^ref));\n@@ -121,5 +121,5 @@ static_assert (bit_size_of (^^V::g) == 3\n static_assert (bit_size_of (^^V::h) == CHAR_BIT * sizeof (int *));\n static_assert (bit_size_of (^^V::i) == CHAR_BIT * sizeof (long long) - 3);\n static_assert (bit_size_of (std::meta::bases_of (^^S, ctx)[0]) == CHAR_BIT * sizeof (B));\n-static_assert (bit_size_of (std::meta::data_member_spec (^^int, { .name = \"member\" })) == CHAR_BIT * sizeof (int));\n-static_assert (bit_size_of (std::meta::data_member_spec (^^int, { .name = \"member2\", .bit_width = 6 })) == 6);\n+static_assert (bit_size_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })) == CHAR_BIT * sizeof (int));\n+static_assert (bit_size_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member2\", .bit_width = 6 })) == 6);\n--- gcc/testsuite/g++.dg/reflect/can_substitute1.C.jj\t2026-01-15 16:33:47.004726583 +0100\n+++ gcc/testsuite/g++.dg/reflect/can_substitute1.C\t2026-03-24 23:13:58.383677718 +0100\n@@ -88,7 +88,7 @@ static_assert (!could_substitute (^^deco\n static_assert (!could_substitute (^^decomp_ref, {}));\n static_assert (!could_substitute (^^arr, {}));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"a\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"a\" });\n static_assert (!could_substitute (dms, {}));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/complete1.C.jj\t2026-01-15 16:33:47.005097993 +0100\n+++ gcc/testsuite/g++.dg/reflect/complete1.C\t2026-03-24 23:27:57.151071334 +0100\n@@ -32,9 +32,9 @@ S<0> s1;\n constexpr auto a = ^^S<42>;\n bool b = is_complete_type (^^S<43>);\n bool c = is_enumerable_type (^^S<44>);\n-constexpr auto d = data_member_spec (^^S<45>, { .name = \"_\" });\n+constexpr auto d = std::meta::data_member_spec ({ .type = ^^S<45>, .name = \"_\" });\n consteval {\n-  define_aggregate (^^S<46>, { data_member_spec (^^int, { .name = \"_\" }) });\n+  define_aggregate (^^S<46>, { std::meta::data_member_spec ({ .type = ^^int, .name = \"_\" }) });\n }\n auto e = size_of (^^S<47>);\n auto f = bit_size_of (^^S<48>);\n@@ -50,5 +50,5 @@ bool n = has_inaccessible_nonstatic_data\n bool o = has_inaccessible_bases (^^S<56>, ctx);\n bool p = has_inaccessible_subobjects (^^S<57>, ctx);\n consteval {\n-  define_aggregate (^^S<58>, { data_member_spec (^^S<59>, { .name = \"_\" }) });\n+  define_aggregate (^^S<58>, { std::meta::data_member_spec ({ .type = ^^S<59>, .name = \"_\" }) });\n }\n--- gcc/testsuite/g++.dg/reflect/data_member_spec1.C.jj\t2026-01-15 16:33:47.006097976 +0100\n+++ gcc/testsuite/g++.dg/reflect/data_member_spec1.C\t2026-03-24 23:45:02.169861923 +0100\n@@ -10,9 +10,9 @@ enum E { E0, E1 };\n struct S {};\n \n consteval bool\n-valid_data_member_spec (info r, data_member_options opts)\n+valid_data_member_spec (data_member_options opts)\n {\n-  try { data_member_spec (r, opts); }\n+  try { data_member_spec (opts); }\n   catch (std::meta::exception &) { return false; }\n   return true;\n }\n@@ -21,99 +21,100 @@ consteval bool\n foo ()\n {\n   std::string n1 = \"bar\";\n-  data_member_options a = { .name = n1 };\n-  auto dmsa = data_member_spec (^^S, a);\n+  data_member_options a = { .type = ^^S, .name = n1 };\n+  auto dmsa = data_member_spec (a);\n   if (!is_data_member_spec (dmsa))\n     throw 1;\n   std::u8string_view n2 = u8\"baz\";\n-  data_member_options b = { .name = n2, .alignment = 2 * alignof (long), .no_unique_address = true };\n-  auto dmsb = data_member_spec (^^long, b);\n+  data_member_options b = { .type = ^^long, .name = n2, .alignment = 2 * alignof (long), .no_unique_address = true };\n+  auto dmsb = data_member_spec (b);\n   if (!is_data_member_spec (dmsb))\n     throw 2;\n-  data_member_options c = { .bit_width = 7 };\n-  auto dmsc = data_member_spec (^^int, c);\n+  data_member_options c = { .type = ^^int, .bit_width = 7 };\n+  auto dmsc = data_member_spec (c);\n   if (!is_data_member_spec (dmsc))\n     throw 3;\n-  data_member_options d = { .name = \"extremely_long_identifier1\", .bit_width = 6 };\n-  auto dmsd = data_member_spec (^^E, d);\n+  data_member_options d = { .type = ^^E, .name = \"extremely_long_identifier1\", .bit_width = 6 };\n+  auto dmsd = data_member_spec (d);\n   if (!is_data_member_spec (dmsd))\n     throw 4;\n-  data_member_options e = { .bit_width = 0 };\n-  auto dmse = data_member_spec (^^int, e);\n+  data_member_options e = { .type = ^^int, .bit_width = 0 };\n+  auto dmse = data_member_spec (e);\n   if (!is_data_member_spec (dmse))\n     throw 5;\n-  data_member_options f = { .name = u8\"extremely_long_identifier2\", .alignment = 2 * alignof (E) };\n-  auto dmsf = data_member_spec (^^E &, f);\n+  data_member_options f = { .type = ^^E &, .name = u8\"extremely_long_identifier2\", .alignment = 2 * alignof (E) };\n+  auto dmsf = data_member_spec (f);\n   if (!is_data_member_spec (dmsf))\n     throw 6;\n-  if (dmsa != data_member_spec (^^S, { .name = \"bar\" }))\n+  if (dmsa != data_member_spec ({ .type = ^^S, .name = \"bar\" }))\n     throw 7;\n-  if (dmsb != data_member_spec (^^long, { .name = u8\"baz\", .alignment = 2 * alignof (long), .no_unique_address = true }))\n+  if (dmsb != data_member_spec ({ .type = ^^long, .name = u8\"baz\", .alignment = 2 * alignof (long), .no_unique_address = true }))\n     throw 8;\n-  if (dmsc != data_member_spec (^^int, { .bit_width = 7ULL }))\n+  if (dmsc != data_member_spec ({ .type = ^^int, .bit_width = 7ULL }))\n     throw 9;\n-  if (dmsd != data_member_spec (^^E, { .name = \"extremely_long_identifier1\", .bit_width = 6 }))\n+  if (dmsd != data_member_spec ({ .type = ^^E, .name = \"extremely_long_identifier1\", .bit_width = 6 }))\n     throw 10;\n-  if (dmse != data_member_spec (^^int, { .bit_width = 0U }))\n+  if (dmse != data_member_spec ({ .type = ^^int, .bit_width = 0U }))\n     throw 11;\n-  if (dmsf != data_member_spec (^^E &, { .name = u8\"extremely_long_identifier2\", .alignment = 2 * alignof (E) }))\n+  if (dmsf != data_member_spec ({ .type = ^^E &, .name = u8\"extremely_long_identifier2\", .alignment = 2 * alignof (E) }))\n     throw 12;\n-  if (dmsa == data_member_spec (^^const S, { .name = \"bar\" }))\n+  if (dmsa == data_member_spec ({ .type = ^^const S, .name = \"bar\" }))\n     throw 13;\n-  if (dmsa == data_member_spec (^^S, { .name = \"foo\" }))\n+  if (dmsa == data_member_spec ({ .type = ^^S, .name = \"foo\" }))\n     throw 14;\n-  if (dmsb == data_member_spec (^^long, { .name = u8\"baz\", .alignment = 4 * alignof (long), .no_unique_address = true }))\n+  if (dmsb == data_member_spec ({ .type = ^^long, .name = u8\"baz\", .alignment = 4 * alignof (long), .no_unique_address = true }))\n     throw 15;\n-  if (dmsb == data_member_spec (^^long, { .name = u8\"baz\", .alignment = 2 * alignof (long), .no_unique_address = false }))\n+  if (dmsb == data_member_spec ({ .type = ^^long, .name = u8\"baz\", .alignment = 2 * alignof (long), .no_unique_address = false }))\n     throw 16;\n-  if (dmsc == data_member_spec (^^int, { .bit_width = 8 }))\n+  if (dmsc == data_member_spec ({ .type = ^^int, .bit_width = 8 }))\n     throw 17;\n-  if (dmsd == data_member_spec (^^E, { .name = \"extremely_long_identifier3\", .bit_width = 6 }))\n+  if (dmsd == data_member_spec ({ .type = ^^E, .name = \"extremely_long_identifier3\", .bit_width = 6 }))\n     throw 18;\n-  if (dmsd == data_member_spec (^^E, { .name = \"extremely_long_identifier\", .bit_width = 5 }))\n+  if (dmsd == data_member_spec ({ .type = ^^E, .name = \"extremely_long_identifier\", .bit_width = 5 }))\n     throw 19;\n-  if (dmse == data_member_spec (^^int, { .name = \"a\" }))\n+  if (dmse == data_member_spec ({ .type = ^^int, .name = \"a\" }))\n     throw 20;\n-  if (data_member_spec (^^int, { .name = \"a\" }) == data_member_spec (^^int, { .name = \"a\", .no_unique_address = true }))\n+  if (data_member_spec ({ .type = ^^int, .name = \"a\" })\n+      == data_member_spec ({ .type = ^^int, .name = \"a\", .no_unique_address = true }))\n     throw 21;\n   return true;\n }\n \n static_assert (foo ());\n \n-static_assert (!valid_data_member_spec (^^void, { .name = \"a\" }));\n-static_assert (!valid_data_member_spec (^^int (int), { .name = \"a\" }));\n-static_assert (!valid_data_member_spec (^^int, {}));\n-static_assert (!valid_data_member_spec (^^int, { .alignment = alignof (int) }));\n-static_assert (!valid_data_member_spec (^^int, { .no_unique_address = true }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"for\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"if\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"char8_t\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"virtual\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"static_assert\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"__is_convertible\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"__builtin_is_implicit_lifetime\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"007\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"operator++\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"operator ++\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"foo\\\\u00AA\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"+ -\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"\\u00AA\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"\\u00AB\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"\\u00B6\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"\\u00BA\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"\\u00C0\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"\\u00D6\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"\\u0384\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"\\u0669\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"A\\u0669\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"\\u0E59\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"A\\u0E59\" }));\n-static_assert (!valid_data_member_spec (^^S, { .name = \"a\", .bit_width = 4 }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"a\", .alignment = alignof (int), .bit_width = 4 }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"a\", .bit_width = 4, .no_unique_address = true }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"a\", .bit_width = 0 }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"a\", .bit_width = -42 }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"a\", .alignment = 41 }));\n-static_assert (!valid_data_member_spec (^^int, { .name = \"a\", .alignment = -__INT_MAX__ - 1 }));\n-static_assert (!valid_data_member_spec (^^long long, { .name = \"a\", .alignment = alignof (long long) / 2 }));\n+static_assert (!valid_data_member_spec ({ .type = ^^void, .name = \"a\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int (int), .name = \"a\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int,}));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .alignment = alignof (int) }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .no_unique_address = true }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"for\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"if\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"char8_t\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"virtual\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"static_assert\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"__is_convertible\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"__builtin_is_implicit_lifetime\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"007\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"operator++\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"operator ++\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"foo\\\\u00AA\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"+ -\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u00AA\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u00AB\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u00B6\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u00BA\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u00C0\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u00D6\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u0384\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u0669\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"A\\u0669\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"\\u0E59\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"A\\u0E59\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^S, .name = \"a\", .bit_width = 4 }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"a\", .alignment = alignof (int), .bit_width = 4 }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"a\", .bit_width = 4, .no_unique_address = true }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"a\", .bit_width = 0 }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"a\", .bit_width = -42 }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"a\", .alignment = 41 }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = \"a\", .alignment = -__INT_MAX__ - 1 }));\n+static_assert (!valid_data_member_spec ({ .type = ^^long long, .name = \"a\", .alignment = alignof (long long) / 2 }));\n--- gcc/testsuite/g++.dg/reflect/data_member_spec2.C.jj\t2026-01-15 16:33:47.006097976 +0100\n+++ gcc/testsuite/g++.dg/reflect/data_member_spec2.C\t2026-03-24 23:22:55.961131497 +0100\n@@ -7,9 +7,9 @@\n using namespace std::meta;\n \n consteval bool\n-valid_data_member_spec (info r, data_member_options opts)\n+valid_data_member_spec (data_member_options opts)\n {\n-  try { data_member_spec (r, opts); }\n+  try { data_member_spec (opts); }\n   catch (std::meta::exception &) { return false; }\n   return true;\n }\n@@ -47,67 +47,67 @@ int arr[] = { 42 };\n auto [ decomp ] = arr;\n auto &[ decomp_ref ] = arr;\n \n-static_assert (!valid_data_member_spec (null_reflection, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^::, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^ns, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^ns_alias, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (reflect_constant (3), { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^cls, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^cls::dm, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^cls::ref_dm, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^cls::static_dm, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^cls::mem_fun, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^cls::static_mem_fun, { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^cls::type, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^cls_var, { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^onion, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^anon, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^fun, { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^alias, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^var, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^ref, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^rref, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^ptr, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^cls_tmpl, { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^cls_tmpl<int>, { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^incomplete_cls<int>, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^fun_tmpl, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^fun_tmpl<int>, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^conc, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (substitute (^^conc, { ^^int }), { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^var_tmpl, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^var_tmpl<int>, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^cls_tmpl_alias, { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^cls_tmpl_alias<int>, { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^Enum, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^Enum::A, { .name = \"dms\" }));\n-static_assert (valid_data_member_spec (^^Enum_class, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^Enum_class::A, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^decomp, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^decomp_ref, { .name = \"dms\" }));\n-static_assert (!valid_data_member_spec (^^arr, { .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = null_reflection, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^::, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^ns, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^ns_alias, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = reflect_constant (3), .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^cls, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^cls::dm, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^cls::ref_dm, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^cls::static_dm, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^cls::mem_fun, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^cls::static_mem_fun, .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^cls::type, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^cls_var, .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^onion, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^anon, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^fun, .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^alias, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^var, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^ref, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^rref, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^ptr, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^cls_tmpl, .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^cls_tmpl<int>, .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^incomplete_cls<int>, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^fun_tmpl, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^fun_tmpl<int>, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^conc, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = substitute (^^conc, { ^^int }), .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^var_tmpl, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^var_tmpl<int>, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^cls_tmpl_alias, .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^cls_tmpl_alias<int>, .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^Enum, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^Enum::A, .name = \"dms\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^Enum_class, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^Enum_class::A, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^decomp, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^decomp_ref, .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^arr, .name = \"dms\" }));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n-static_assert (!valid_data_member_spec (dms, { .name = \"dms\" }));\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n+static_assert (!valid_data_member_spec ({ .type = dms, .name = \"dms\" }));\n \n struct Base {};\n struct Derived : Base {};\n-static_assert (!valid_data_member_spec (bases_of (^^Derived, access_context::unchecked ())[0], { .name = \"dms\" }));\n+static_assert (!valid_data_member_spec ({ .type = bases_of (^^Derived, access_context::unchecked ())[0], .name = \"dms\" }));\n \n template<typename T, info R, info R2, info R3>\n void\n f ()\n {\n-  static_assert (valid_data_member_spec (^^T, { .name = \"dms\" }));\n-  static_assert (!valid_data_member_spec (R, { .name = \"dms\" }));\n-  static_assert (!valid_data_member_spec (R2, { .name = \"dms\" }));\n-  static_assert (valid_data_member_spec (R3, { .name = \"dms\" }));\n+  static_assert (valid_data_member_spec ({ .type = ^^T, .name = \"dms\" }));\n+  static_assert (!valid_data_member_spec ({ .type = R, .name = \"dms\" }));\n+  static_assert (!valid_data_member_spec ({ .type = R2, .name = \"dms\" }));\n+  static_assert (valid_data_member_spec ({ .type = R3, .name = \"dms\" }));\n }\n \n void\n g (int p, cls c)\n {\n   f<int, ^^var, ^^ns, ^^cls>();\n-  static_assert (!valid_data_member_spec (^^p, { .name = \"dms\" }));\n-  static_assert (!valid_data_member_spec (^^c, { .name = \"dms\" }));\n+  static_assert (!valid_data_member_spec ({ .type = ^^p, .name = \"dms\" }));\n+  static_assert (!valid_data_member_spec ({ .type = ^^c, .name = \"dms\" }));\n }\n--- gcc/testsuite/g++.dg/reflect/data_member_spec3.C.jj\t2026-01-15 16:33:47.006097976 +0100\n+++ gcc/testsuite/g++.dg/reflect/data_member_spec3.C\t2026-03-24 23:37:52.840070055 +0100\n@@ -7,23 +7,23 @@\n using namespace std::meta;\n \n consteval bool\n-valid_data_member_spec (info r, data_member_options opts)\n+valid_data_member_spec (data_member_options opts)\n {\n-  try { data_member_spec (r, opts); }\n+  try { data_member_spec (opts); }\n   catch (std::meta::exception &) { return false; }\n   return true;\n }\n \n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"👷\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"👷.♀\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"⏰\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"🕐\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"☠\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"💀\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"✋\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"👊\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"✈\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"🚀\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"☹\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"😀\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"💩\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"👷\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"👷.♀\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"⏰\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"🕐\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"☠\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"💀\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"✋\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"👊\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"✈\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"🚀\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"☹\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"😀\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"💩\" }));\n--- gcc/testsuite/g++.dg/reflect/data_member_spec4.C.jj\t2026-01-15 16:33:47.006097976 +0100\n+++ gcc/testsuite/g++.dg/reflect/data_member_spec4.C\t2026-03-24 23:38:06.098847450 +0100\n@@ -7,23 +7,23 @@\n using namespace std::meta;\n \n consteval bool\n-valid_data_member_spec (info r, data_member_options opts)\n+valid_data_member_spec (data_member_options opts)\n {\n-  try { data_member_spec (r, opts); }\n+  try { data_member_spec (opts); }\n   catch (std::meta::exception &) { return false; }\n   return true;\n }\n \n-static_assert (valid_data_member_spec (^^int, { .name = u8\"👷\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"👷.♀\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"⏰\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"🕐\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"☠\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"💀\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"✋\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"👊\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"✈\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"🚀\" }));\n-static_assert (!valid_data_member_spec (^^int, { .name = u8\"☹\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"😀\" }));\n-static_assert (valid_data_member_spec (^^int, { .name = u8\"💩\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"👷\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"👷.♀\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"⏰\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"🕐\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"☠\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"💀\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"✋\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"👊\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"✈\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"🚀\" }));\n+static_assert (!valid_data_member_spec ({ .type = ^^int, .name = u8\"☹\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"😀\" }));\n+static_assert (valid_data_member_spec ({ .type = ^^int, .name = u8\"💩\" }));\n--- gcc/testsuite/g++.dg/reflect/define_aggregate1.C.jj\t2026-01-15 16:33:47.006097976 +0100\n+++ gcc/testsuite/g++.dg/reflect/define_aggregate1.C\t2026-03-24 23:15:00.665116752 +0100\n@@ -26,44 +26,44 @@ using A9 = S9;\n consteval {\n   if (define_aggregate (^^S1, {}) != ^^S1)\n     throw 1;\n-  if (define_aggregate (^^S2, { data_member_spec (^^S1, { .name = \"bar\" }),\n-\t\t\t\tdata_member_spec (^^long, { .name = u8\"baz\",\n-\t\t\t\t\t\t\t    .alignment = 2 * alignof (long),\n-\t\t\t\t\t\t\t    .no_unique_address = true }),\n-\t\t\t\tdata_member_spec (^^unsigned int, { .bit_width = 7 }),\n-\t\t\t\tdata_member_spec (^^E, { .name = \"extremely_long_identifier1\",\n-\t\t\t\t\t\t\t .bit_width = 6 }),\n-\t\t\t\tdata_member_spec (^^int, { .bit_width = 0 }),\n-\t\t\t\tdata_member_spec (^^const E *, { .name = u8\"extremely_long_identifier2\",\n-\t\t\t\t\t\t\t\t .alignment = 2 * alignof (E *) }) }) != ^^S2)\n+  if (define_aggregate (^^S2, { data_member_spec ({ .type = ^^S1, .name = \"bar\" }),\n+\t\t\t\tdata_member_spec ({ .type = ^^long, .name = u8\"baz\",\n+\t\t\t\t\t\t    .alignment = 2 * alignof (long),\n+\t\t\t\t\t\t    .no_unique_address = true }),\n+\t\t\t\tdata_member_spec ({ .type = ^^unsigned int, .bit_width = 7 }),\n+\t\t\t\tdata_member_spec ({ .type = ^^E, .name = \"extremely_long_identifier1\",\n+\t\t\t\t\t\t    .bit_width = 6 }),\n+\t\t\t\tdata_member_spec ({ .type = ^^int, .bit_width = 0 }),\n+\t\t\t\tdata_member_spec ({ .type = ^^const E *, .name = u8\"extremely_long_identifier2\",\n+\t\t\t\t\t\t    .alignment = 2 * alignof (E *) }) }) != ^^S2)\n     throw 2;\n-  if (define_aggregate (^^S3, { data_member_spec (^^S0, { .name = \"a\",\n-\t\t\t\t\t\t\t  .no_unique_address = true }),\n-\t\t\t\tdata_member_spec (^^S1, { .name = \"b\",\n-\t\t\t\t\t\t\t  .no_unique_address = true }) }) != ^^S3)\n+  if (define_aggregate (^^S3, { data_member_spec ({ .type = ^^S0, .name = \"a\",\n+\t\t\t\t\t\t    .no_unique_address = true }),\n+\t\t\t\tdata_member_spec ({ .type = ^^S1, .name = \"b\",\n+\t\t\t\t\t\t    .no_unique_address = true }) }) != ^^S3)\n     throw 3;\n-  if (define_aggregate (^^S4, { data_member_spec (^^S0, { .name = \"c\" }),\n-\t\t\t\tdata_member_spec (^^S1, { .name = \"d\" }) }) != ^^S4)\n+  if (define_aggregate (^^S4, { data_member_spec ({ .type = ^^S0, .name = \"c\" }),\n+\t\t\t\tdata_member_spec ({ .type = ^^S1, .name = \"d\" }) }) != ^^S4)\n     throw 4;\n-  if (define_aggregate (^^S5, { data_member_spec (^^const E &, { .name = u8\"qu\\N{LATIN SMALL LETTER AE}\" }),\n-\t\t\t\tdata_member_spec (^^const E &, { .name = u8\"foo\" }) }) != ^^S5)\n+  if (define_aggregate (^^S5, { data_member_spec ({ .type = ^^const E &, .name = u8\"qu\\N{LATIN SMALL LETTER AE}\" }),\n+\t\t\t\tdata_member_spec ({ .type = ^^const E &, .name = u8\"foo\" }) }) != ^^S5)\n     throw 5;\n-  if (define_aggregate (^^U1, { data_member_spec (^^int, { .name = u8\"_\" }),\n-\t\t\t\tdata_member_spec (^^long long, { .name = \"abc\" }) }) != ^^U1)\n+  if (define_aggregate (^^U1, { data_member_spec ({ .type = ^^int, .name = u8\"_\" }),\n+\t\t\t\tdata_member_spec ({ .type = ^^long long, .name = \"abc\" }) }) != ^^U1)\n     throw 6;\n-  if (define_aggregate (^^S6 <42>, { data_member_spec (^^int, { .name = \"a\" }),\n-\t\t\t\t     data_member_spec (^^long, { .name = \"b\" }) }) != ^^S6 <42>)\n+  if (define_aggregate (^^S6 <42>, { data_member_spec ({ .type = ^^int, .name = \"a\" }),\n+\t\t\t\t     data_member_spec ({ .type = ^^long, .name = \"b\" }) }) != ^^S6 <42>)\n     throw 7;\n   if (define_aggregate (substitute (^^S6, { reflect_constant (43) }),\n-\t\t\t{ data_member_spec (^^long, { .name = \"c\" }),\n-\t\t\t  data_member_spec (^^unsigned int, { .name = \"d\", .bit_width = 3 }) }) != ^^S6 <43>)\n+\t\t\t{ data_member_spec ({ .type = ^^long, .name = \"c\" }),\n+\t\t\t  data_member_spec ({ .type = ^^unsigned int, .name = \"d\", .bit_width = 3 }) }) != ^^S6 <43>)\n     throw 8;\n-  if (define_aggregate (^^S7 <42>, { data_member_spec (^^short, { .name = \"g\" }),\n-\t\t\t\t     data_member_spec (^^float, { .name = \"h\" }) }) != ^^S7 <42>)\n+  if (define_aggregate (^^S7 <42>, { data_member_spec ({ .type = ^^short, .name = \"g\" }),\n+\t\t\t\t     data_member_spec ({ .type = ^^float, .name = \"h\" }) }) != ^^S7 <42>)\n     throw 9;\n-  if (define_aggregate (^^S8, { data_member_spec (^^U1, { .name = \"u\" }) }) != ^^S8)\n+  if (define_aggregate (^^S8, { data_member_spec ({ .type = ^^U1, .name = \"u\" }) }) != ^^S8)\n     throw 10;\n-  if (define_aggregate (dealias (^^A9), { data_member_spec (^^U1, { .name = \"u\" }) }) != ^^S9)\n+  if (define_aggregate (dealias (^^A9), { data_member_spec ({ .type = ^^U1, .name = \"u\" }) }) != ^^S9)\n     throw 10;\n }\n \n--- gcc/testsuite/g++.dg/reflect/define_aggregate2.C.jj\t2026-01-15 16:33:47.006097976 +0100\n+++ gcc/testsuite/g++.dg/reflect/define_aggregate2.C\t2026-03-24 23:13:58.404242965 +0100\n@@ -33,12 +33,12 @@ consteval { define_aggregate (^^const S9\n consteval { define_aggregate (^^volatile S10, {}); }\t// { dg-error \"first 'define_aggregate' argument is a cv-qualified class type reflection\" }\n consteval { define_aggregate (^^S11 const volatile, {}); } // { dg-error \"first 'define_aggregate' argument is a cv-qualified class type reflection\" }\n consteval { define_aggregate (^^S1, { ^^int }); }\t// { dg-error \"'define_aggregate' argument not a data member description\" }\n-consteval { define_aggregate (^^S2, { data_member_spec (^^S5, { .name = \"a\" }) }); }\t// { dg-error \"'define_aggregate' argument data member description without complete type\" }\n-consteval { define_aggregate (^^S3, { data_member_spec (^^int, { .name = \"a\" }),\t// { dg-error \"name 'a' used in multiple data member descriptions\" }\n-\t\t\t\t      data_member_spec (^^long, { .name = \"a\" }) }); }\n-consteval { define_aggregate (^^S4, { data_member_spec (^^int, { .name = u8\"_\" }),\n-\t\t\t\t      data_member_spec (^^long, { .name = u8\"_\" }) }); }\n-consteval { define_aggregate (^^S12, { data_member_spec (^^int, { .name = \"foobar\" }),\t// { dg-error \"name 'foobar' used in multiple data member descriptions\" }\n-\t\t\t\t       data_member_spec (^^long, { .name = u8\"foobar\" }) }); }\n+consteval { define_aggregate (^^S2, { data_member_spec ({ .type = ^^S5, .name = \"a\" }) }); }\t// { dg-error \"'define_aggregate' argument data member description without complete type\" }\n+consteval { define_aggregate (^^S3, { data_member_spec ({ .type = ^^int, .name = \"a\" }),\t// { dg-error \"name 'a' used in multiple data member descriptions\" }\n+\t\t\t\t      data_member_spec ({ .type = ^^long, .name = \"a\" }) }); }\n+consteval { define_aggregate (^^S4, { data_member_spec ({ .type = ^^int, .name = u8\"_\" }),\n+\t\t\t\t      data_member_spec ({ .type = ^^long, .name = u8\"_\" }) }); }\n+consteval { define_aggregate (^^S12, { data_member_spec ({ .type = ^^int, .name = \"foobar\" }),\t// { dg-error \"name 'foobar' used in multiple data member descriptions\" }\n+\t\t\t\t       data_member_spec ({ .type = ^^long, .name = u8\"foobar\" }) }); }\n constexpr S4 s4 = { 1, 2 };\n consteval { auto a = s4._; }\t\t\t\t// { dg-error \"request for member '_' is ambiguous\" }\n--- gcc/testsuite/g++.dg/reflect/define_aggregate4.C.jj\t2026-01-15 16:33:47.006097976 +0100\n+++ gcc/testsuite/g++.dg/reflect/define_aggregate4.C\t2026-03-24 23:13:58.407055279 +0100\n@@ -67,22 +67,22 @@ bar ()\n       throw 2;\n     if (is_complete_type (^^U))\n       throw 3;\n-    define_aggregate (^^S, { data_member_spec (^^int, { .name = \"a\", .alignment = 32 }),\n-\t\t\t     data_member_spec (^^bool, { .name = \"b\" }),\n-\t\t\t     data_member_spec (^^int, { .bit_width = 0 }),\n-\t\t\t     data_member_spec (^^int, { .name = \"_\", .bit_width = 3 }),});\n-    define_aggregate (^^C, { data_member_spec (^^int, { .name = \"a\", .alignment = 32 }),\n-\t\t\t     data_member_spec (^^bool, { .name = \"b\" }),\n-\t\t\t     data_member_spec (^^int, { .bit_width = 0 }),\n-\t\t\t     data_member_spec (^^int, { .name = \"_\", .bit_width = 3 }),});\n-    define_aggregate (^^U, { data_member_spec (^^int, { .name = \"a\", .alignment = 32 }),\n-\t\t\t     data_member_spec (^^bool, { .name = \"b\" }),\n-\t\t\t     data_member_spec (^^int, { .bit_width = 0 }),\n-\t\t\t     data_member_spec (^^int, { .name = \"_\", .bit_width = 3 }),});\n-    define_aggregate (^^U2, { data_member_spec (^^int, { .name = \"a\" }),\n-\t\t\t      data_member_spec (^^bool, { .name = \"b\" }),\n-\t\t\t      data_member_spec (^^int, { .bit_width = 0 }),\n-\t\t\t      data_member_spec (^^int, { .name = \"_\", .bit_width = 3 }),});\n+    define_aggregate (^^S, { data_member_spec ({ .type = ^^int, .name = \"a\", .alignment = 32 }),\n+\t\t\t     data_member_spec ({ .type = ^^bool, .name = \"b\" }),\n+\t\t\t     data_member_spec ({ .type = ^^int, .bit_width = 0 }),\n+\t\t\t     data_member_spec ({ .type = ^^int, .name = \"_\", .bit_width = 3 }),});\n+    define_aggregate (^^C, { data_member_spec ({ .type = ^^int, .name = \"a\", .alignment = 32 }),\n+\t\t\t     data_member_spec ({ .type = ^^bool, .name = \"b\" }),\n+\t\t\t     data_member_spec ({ .type = ^^int, .bit_width = 0 }),\n+\t\t\t     data_member_spec ({ .type = ^^int, .name = \"_\", .bit_width = 3 }),});\n+    define_aggregate (^^U, { data_member_spec ({ .type = ^^int, .name = \"a\", .alignment = 32 }),\n+\t\t\t     data_member_spec ({ .type = ^^bool, .name = \"b\" }),\n+\t\t\t     data_member_spec ({ .type = ^^int, .bit_width = 0 }),\n+\t\t\t     data_member_spec ({ .type = ^^int, .name = \"_\", .bit_width = 3 }),});\n+    define_aggregate (^^U2, { data_member_spec ({ .type = ^^int, .name = \"a\" }),\n+\t\t\t      data_member_spec ({ .type = ^^bool, .name = \"b\" }),\n+\t\t\t      data_member_spec ({ .type = ^^int, .bit_width = 0 }),\n+\t\t\t      data_member_spec ({ .type = ^^int, .name = \"_\", .bit_width = 3 }),});\n     if (!is_complete_type (^^S))\n       throw 4;\n     if (!is_complete_type (^^C))\n@@ -218,8 +218,8 @@ baz ()\n   struct E {};\n   struct S;\n   consteval {\n-    define_aggregate (^^S, { data_member_spec (^^int, { .name = \"_\" }),\n-\t\t\t     data_member_spec (^^E, { .name = \"_\", .no_unique_address = true }) });\n+    define_aggregate (^^S, { data_member_spec ({ .type = ^^int, .name = \"_\" }),\n+\t\t\t     data_member_spec ({ .type = ^^E, .name = \"_\", .no_unique_address = true }) });\n   }\n   static_assert (sizeof (S) == sizeof (int));\n }\n\\ No newline at end of file\n--- gcc/testsuite/g++.dg/reflect/define_aggregate5.C.jj\t2026-01-15 16:33:47.006097976 +0100\n+++ gcc/testsuite/g++.dg/reflect/define_aggregate5.C\t2026-03-24 23:13:58.413162621 +0100\n@@ -13,9 +13,9 @@ consteval {\n   using std::vector;\n   using std::pair;\n   define_aggregate (^^foo, join (vector <vector <pair <bool, info>>> {\n-    { make_pair (true, data_member_spec (^^int, { .name = \"i\" })) },\n-    { make_pair (false, data_member_spec (^^std::string, { .name = \"s\" })),\n-      make_pair (true, data_member_spec (^^bool, { .name = \"b\" })) }})\n+    { make_pair (true, data_member_spec ({ .type = ^^int, .name = \"i\" })) },\n+    { make_pair (false, data_member_spec ({ .type = ^^std::string, .name = \"s\" })),\n+      make_pair (true, data_member_spec ({ .type = ^^bool, .name = \"b\" })) }})\n \t| filter ([] (auto x) constexpr { return x.first; })\n \t| transform ([] (auto x) constexpr { return x.second; }));\n }\n--- gcc/testsuite/g++.dg/reflect/define_aggregate6.C.jj\t2026-02-09 17:54:04.737518923 +0100\n+++ gcc/testsuite/g++.dg/reflect/define_aggregate6.C\t2026-03-24 23:38:23.417556682 +0100\n@@ -7,7 +7,7 @@\n struct A;\n consteval\n {\n-  define_aggregate (^^A, { data_member_spec (^^int, {.name{\"_\"}}) });\n+  define_aggregate (^^A, { std::meta::data_member_spec ({ .type = ^^int, .name{\"_\"} }) });\n }\n \n struct B : A {};\n--- gcc/testsuite/g++.dg/reflect/display_string_of1.C.jj\t2026-03-13 09:13:00.748867039 +0100\n+++ gcc/testsuite/g++.dg/reflect/display_string_of1.C\t2026-03-24 23:13:58.419214921 +0100\n@@ -115,10 +115,10 @@ foo (int a, const long b, T c, int d[4],\n   static_assert (display_string_of (^^NSAlias) == \"NSAlias\");\n   static_assert (display_string_of (^^NS) == \"NS\");\n   static_assert (display_string_of (bases_of (^^S, ctx)[0]) == \"S: B\");\n-  static_assert (display_string_of (data_member_spec (^^int, { .name = \"member\", .alignment = 128, .no_unique_address = true })) == \"(int, member, 128, , true)\");\n-  static_assert (display_string_of (data_member_spec (^^const int, { .name = \"member\", .bit_width = 6 })) == \"(const int, member, , 6, false)\");\n-  static_assert (display_string_of (data_member_spec (^^int, { .bit_width = 0 })) == \"(int, , , 0, false)\");\n-  static_assert (display_string_of (data_member_spec (^^long, { .bit_width = 5 })) == \"(long int, , , 5, false)\");\n+  static_assert (display_string_of (data_member_spec ({ .type = ^^int, .name = \"member\", .alignment = 128, .no_unique_address = true })) == \"(int, member, 128, , true)\");\n+  static_assert (display_string_of (data_member_spec ({ .type = ^^const int, .name = \"member\", .bit_width = 6 })) == \"(const int, member, , 6, false)\");\n+  static_assert (display_string_of (data_member_spec ({ .type = ^^int, .bit_width = 0 })) == \"(int, , , 0, false)\");\n+  static_assert (display_string_of (data_member_spec ({ .type = ^^long, .bit_width = 5 })) == \"(long int, , , 5, false)\");\n   static_assert (display_string_of (annotations_of (^^bar)[0]) == \"[[=1]]\");\n   static_assert (display_string_of (annotations_of (^^bar)[1]) == \"[[=AN{1, 42, ' '}]]\");\n   static_assert (display_string_of (^^int) == \"int\");\n--- gcc/testsuite/g++.dg/reflect/eh5.C.jj\t2026-01-15 16:33:47.007097959 +0100\n+++ gcc/testsuite/g++.dg/reflect/eh5.C\t2026-03-24 23:13:58.422188770 +0100\n@@ -58,7 +58,7 @@ baz (info x)\n {\n   try\n     {\n-      data_member_spec (x, { .name = \"consteval\" });\n+      data_member_spec ({ .type = x, .name = \"consteval\" });\n     }\n   catch (std::meta::exception &ex)\n     {\n--- gcc/testsuite/g++.dg/reflect/has_c_language_linkage1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_c_language_linkage1.C\t2026-03-24 23:13:58.425045779 +0100\n@@ -82,7 +82,7 @@ static_assert (!has_c_language_linkage (\n static_assert (!has_c_language_linkage (^^decomp_ref));\n static_assert (!has_c_language_linkage (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"a\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"a\" });\n static_assert (!has_c_language_linkage (dms));\n \n template<typename T, info R, info R2, info R3>\n--- gcc/testsuite/g++.dg/reflect/has_default_argument1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_default_argument1.C\t2026-03-24 23:13:58.427970493 +0100\n@@ -79,7 +79,7 @@ static_assert (!has_default_argument (^^\n static_assert (!has_default_argument (^^decomp_ref));\n static_assert (!has_default_argument (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"n\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"n\" });\n static_assert (!has_default_argument (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/has_default_member_initializer1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_default_member_initializer1.C\t2026-03-24 23:13:58.430815588 +0100\n@@ -109,7 +109,7 @@ static_assert (!has_default_member_initi\n static_assert (!has_default_member_initializer (^^decomp_ref));\n static_assert (!has_default_member_initializer (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"a\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"a\" });\n static_assert (!has_default_member_initializer (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/has_ellipsis_parameter1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_ellipsis_parameter1.C\t2026-03-24 23:13:58.433636672 +0100\n@@ -122,7 +122,7 @@ static_assert (has_ellipsis_parameter (^\n static_assert (has_ellipsis_parameter (^^funt3));\n static_assert (!has_ellipsis_parameter (^^funt4));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = u8\"a\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = u8\"a\" });\n static_assert (!has_ellipsis_parameter (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/has_external_linkage1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_external_linkage1.C\t2026-03-24 23:13:58.436162234 +0100\n@@ -81,7 +81,7 @@ static_assert (!has_external_linkage (^^\n static_assert (!has_external_linkage (^^decomp_ref));\n static_assert (has_external_linkage (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!has_external_linkage (dms));\n \n template<typename T, info R, info R2, info R3>\n--- gcc/testsuite/g++.dg/reflect/has_identifier1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_identifier1.C\t2026-03-24 23:13:58.439417475 +0100\n@@ -43,10 +43,10 @@ static_assert (has_identifier (^^E7));\n static_assert (has_identifier (dealias (^^E7)));\n [[=1]] int w;\n static_assert (!has_identifier (annotations_of (^^w)[0]));\n-static_assert (!has_identifier (data_member_spec (^^int, { .bit_width = 0 })));\n-static_assert (!has_identifier (data_member_spec (^^long, { .bit_width = 6 })));\n-static_assert (has_identifier (data_member_spec (^^long, { .name = \"dms\", .bit_width = 6 })));\n-static_assert (has_identifier (data_member_spec (^^long, { .name = u8\"dms\", .alignment = 2 * alignof (long) })));\n+static_assert (!has_identifier (data_member_spec ({ .type = ^^int, .bit_width = 0 })));\n+static_assert (!has_identifier (data_member_spec ({ .type = ^^long, .bit_width = 6 })));\n+static_assert (has_identifier (data_member_spec ({ .type = ^^long, .name = \"dms\", .bit_width = 6 })));\n+static_assert (has_identifier (data_member_spec ({ .type = ^^long, .name = u8\"dms\", .alignment = 2 * alignof (long) })));\n \n namespace N {}\n namespace NA = N;\n--- gcc/testsuite/g++.dg/reflect/has_internal_linkage1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_internal_linkage1.C\t2026-03-24 23:13:58.442295241 +0100\n@@ -81,7 +81,7 @@ static_assert (!has_internal_linkage (^^\n static_assert (!has_internal_linkage (^^decomp_ref));\n static_assert (!has_internal_linkage (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!has_internal_linkage (dms));\n \n template<typename T, info R, info R2, info R3>\n--- gcc/testsuite/g++.dg/reflect/has_linkage1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_linkage1.C\t2026-03-24 23:13:58.445103308 +0100\n@@ -81,7 +81,7 @@ static_assert (!has_linkage (^^decomp));\n static_assert (!has_linkage (^^decomp_ref));\n static_assert (has_linkage (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!has_linkage (dms));\n \n template<typename T, info R, info R2, info R3>\n--- gcc/testsuite/g++.dg/reflect/has_module_linkage1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_module_linkage1.C\t2026-03-24 23:13:58.447987923 +0100\n@@ -81,7 +81,7 @@ static_assert (!has_module_linkage (^^de\n static_assert (!has_module_linkage (^^decomp_ref));\n static_assert (!has_module_linkage (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!has_module_linkage (dms));\n \n template<typename T, info R, info R2, info R3>\n--- gcc/testsuite/g++.dg/reflect/has_parent1.C.jj\t2026-01-15 16:33:47.008097942 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_parent1.C\t2026-03-24 23:13:58.450908223 +0100\n@@ -79,7 +79,7 @@ static_assert (has_parent (^^decomp));\n static_assert (has_parent (^^decomp_ref));\n static_assert (has_parent (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!has_parent (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/has_template_arguments1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/has_template_arguments1.C\t2026-03-24 23:13:58.453814501 +0100\n@@ -85,7 +85,7 @@ static_assert (!has_template_arguments (\n static_assert (!has_template_arguments (^^U));\n static_assert (!has_template_arguments (^^TYPE));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!has_template_arguments (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/identifier_of1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/identifier_of1.C\t2026-03-24 23:13:58.456786321 +0100\n@@ -30,8 +30,8 @@ static_assert (identifier_of (^^E) == st\n static_assert (identifier_of (parent_of (^^E5)) == std::string_view (\"E7\"));\n static_assert (identifier_of (^^E7) == std::string_view (\"E7\"));\n static_assert (identifier_of (dealias (^^E7)) == std::string_view (\"E7\"));\n-static_assert (identifier_of (data_member_spec (^^long, { .name = \"foo\", .bit_width = 6 })) == std::string_view (\"foo\"));\n-static_assert (identifier_of (data_member_spec (^^long, { .name = \"extremely_long_string_used_as_identifier\" })) == std::string_view (\"extremely_long_string_used_as_identifier\"));\n+static_assert (identifier_of (data_member_spec ({ .type = ^^long, .name = \"foo\", .bit_width = 6 })) == std::string_view (\"foo\"));\n+static_assert (identifier_of (data_member_spec ({ .type = ^^long, .name = \"extremely_long_string_used_as_identifier\" })) == std::string_view (\"extremely_long_string_used_as_identifier\"));\n \n namespace N {}\n namespace NA = N;\n--- gcc/testsuite/g++.dg/reflect/is_accessible1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_accessible1.C\t2026-03-24 23:13:58.459711441 +0100\n@@ -106,7 +106,7 @@ static_assert (is_accessible (^^decomp,\n static_assert (is_accessible (^^decomp_ref, gctx));\n static_assert (is_accessible (^^arr, gctx));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (is_accessible (dms, gctx));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_alias_template1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_alias_template1.C\t2026-03-24 23:13:58.462649461 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_alias_template (^^dec\n static_assert (!is_alias_template (^^decomp_ref));\n static_assert (!is_alias_template (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_alias_template (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_bit_field1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_bit_field1.C\t2026-03-24 23:13:58.465161747 +0100\n@@ -104,11 +104,11 @@ static_assert (!is_bit_field (^^decomp))\n static_assert (!is_bit_field (^^decomp_ref));\n static_assert (!is_bit_field (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_bit_field (dms));\n-constexpr auto dms2 = data_member_spec (^^int, { .bit_width = 6 });\n+constexpr auto dms2 = data_member_spec ({ .type = ^^int, .bit_width = 6 });\n static_assert (is_bit_field (dms2));\n-constexpr auto dms3 = data_member_spec (^^int, { .name = \"dms\", .bit_width = 15 });\n+constexpr auto dms3 = data_member_spec ({ .type = ^^int, .name = \"dms\", .bit_width = 15 });\n static_assert (is_bit_field (dms3));\n \n constexpr auto ctx = access_context::current ();\n--- gcc/testsuite/g++.dg/reflect/is_class_member1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_class_member1.C\t2026-03-24 23:13:58.468443397 +0100\n@@ -105,7 +105,7 @@ static_assert (!is_class_member (^^decom\n static_assert (!is_class_member (^^decomp_ref));\n static_assert (!is_class_member (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_class_member (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_class_template1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_class_template1.C\t2026-03-24 23:13:58.471264265 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_class_template (^^dec\n static_assert (!is_class_template (^^decomp_ref));\n static_assert (!is_class_template (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_class_template (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_complete_type1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_complete_type1.C\t2026-03-24 23:13:58.474122130 +0100\n@@ -83,7 +83,7 @@ static_assert (!is_complete_type (^^arr)\n static_assert (!is_complete_type (^^inc_arr));\n static_assert (is_complete_type (^^com_arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_complete_type (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_concept1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_concept1.C\t2026-03-24 23:13:58.477021632 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_concept (^^decomp));\n static_assert (!is_concept (^^decomp_ref));\n static_assert (!is_concept (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_concept (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_const1.C.jj\t2026-01-15 16:33:47.009097925 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_const1.C\t2026-03-24 23:13:58.479906974 +0100\n@@ -52,7 +52,7 @@ static_assert (!is_const (^^Concept));\n static_assert (!is_const (^^NSAlias));\n static_assert (!is_const (^^NS));\n static_assert (!is_const (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (!is_const (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n+static_assert (!is_const (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n \n int\n foo (int a, const long b, T c, int d[4], T &e)\n--- gcc/testsuite/g++.dg/reflect/is_data_member_spec1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_data_member_spec1.C\t2026-03-24 23:40:30.608421239 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_data_member_spec (^^d\n static_assert (!is_data_member_spec (^^decomp_ref));\n static_assert (!is_data_member_spec (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (is_data_member_spec (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_defaulted1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_defaulted1.C\t2026-03-24 23:13:58.485651128 +0100\n@@ -104,7 +104,7 @@ static_assert (!is_defaulted (^^decomp))\n static_assert (!is_defaulted (^^decomp_ref));\n static_assert (!is_defaulted (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_defaulted (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_deleted1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_deleted1.C\t2026-03-24 23:13:58.488161361 +0100\n@@ -104,7 +104,7 @@ static_assert (!is_deleted (^^decomp));\n static_assert (!is_deleted (^^decomp_ref));\n static_assert (!is_deleted (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = u8\"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = u8\"dms\" });\n static_assert (!is_deleted (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_enumerator1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_enumerator1.C\t2026-03-24 23:13:58.491295295 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_enumerator (^^decomp)\n static_assert (!is_enumerator (^^decomp_ref));\n static_assert (!is_enumerator (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_enumerator (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_explicit_object_parameter1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_explicit_object_parameter1.C\t2026-03-24 23:13:58.494198951 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_explicit_object_param\n static_assert (!is_explicit_object_parameter (^^decomp_ref));\n static_assert (!is_explicit_object_parameter (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_explicit_object_parameter (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_function1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_function1.C\t2026-03-24 23:13:58.497107317 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_function (^^decomp));\n static_assert (!is_function (^^decomp_ref));\n static_assert (!is_function (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_function (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_function_parameter1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_function_parameter1.C\t2026-03-24 23:13:58.500019178 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_function_parameter (^\n static_assert (!is_function_parameter (^^decomp_ref));\n static_assert (!is_function_parameter (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_function_parameter (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_function_template1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_function_template1.C\t2026-03-24 23:13:58.502894127 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_function_template (^^\n static_assert (!is_function_template (^^decomp_ref));\n static_assert (!is_function_template (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_function_template (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_mutable_member1.C.jj\t2026-01-15 16:33:47.010097908 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_mutable_member1.C\t2026-03-24 23:13:58.505723724 +0100\n@@ -110,7 +110,7 @@ static_assert (!is_mutable_member (^^dec\n static_assert (!is_mutable_member (^^decomp_ref));\n static_assert (!is_mutable_member (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_mutable_member (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_namespace1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_namespace1.C\t2026-03-24 23:13:58.508638405 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_namespace (^^decomp))\n static_assert (!is_namespace (^^decomp_ref));\n static_assert (!is_namespace (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_namespace (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_namespace_alias1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_namespace_alias1.C\t2026-03-24 23:13:58.511430201 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_namespace_alias (^^de\n static_assert (!is_namespace_alias (^^decomp_ref));\n static_assert (!is_namespace_alias (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_namespace_alias (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_namespace_member1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_namespace_member1.C\t2026-03-24 23:13:58.514153326 +0100\n@@ -124,7 +124,7 @@ static_assert (is_namespace_member (^^NN\n static_assert (is_namespace_member (^^NN::E));\n static_assert (is_namespace_member (^^NN::F));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_namespace_member (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_nonstatic_data_member1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_nonstatic_data_member1.C\t2026-03-24 23:13:58.517122844 +0100\n@@ -104,7 +104,7 @@ static_assert (!is_nonstatic_data_member\n static_assert (!is_nonstatic_data_member (^^decomp_ref));\n static_assert (!is_nonstatic_data_member (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_nonstatic_data_member (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_object1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_object1.C\t2026-03-24 23:13:58.520054093 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_object (^^decomp));\n static_assert (!is_object (^^decomp_ref));\n static_assert (!is_object (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_object (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_override1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_override1.C\t2026-03-24 23:13:58.522853055 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_override (^^decomp));\n static_assert (!is_override (^^decomp_ref));\n static_assert (!is_override (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_override (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_static_member1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_static_member1.C\t2026-03-24 23:13:58.525728080 +0100\n@@ -104,7 +104,7 @@ static_assert (!is_static_member (^^deco\n static_assert (!is_static_member (^^decomp_ref));\n static_assert (!is_static_member (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_static_member (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_template1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_template1.C\t2026-03-24 23:13:58.528160689 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_template (^^decomp));\n static_assert (!is_template (^^decomp_ref));\n static_assert (!is_template (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_template (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_type1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_type1.C\t2026-03-24 23:13:58.531445902 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_type (^^decomp));\n static_assert (!is_type (^^decomp_ref));\n static_assert (!is_type (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_type (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_type_alias1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_type_alias1.C\t2026-03-24 23:13:58.534309929 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_type_alias (^^decomp)\n static_assert (!is_type_alias (^^decomp_ref));\n static_assert (!is_type_alias (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_type_alias (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_user_declared1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_user_declared1.C\t2026-03-24 23:13:58.537213228 +0100\n@@ -104,7 +104,7 @@ static_assert (!is_user_declared (^^deco\n static_assert (!is_user_declared (^^decomp_ref));\n static_assert (!is_user_declared (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_user_declared (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_user_provided1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_user_provided1.C\t2026-03-24 23:13:58.540041262 +0100\n@@ -104,7 +104,7 @@ static_assert (!is_user_provided (^^deco\n static_assert (!is_user_provided (^^decomp_ref));\n static_assert (!is_user_provided (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_user_provided (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_variable1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_variable1.C\t2026-03-24 23:13:58.542891451 +0100\n@@ -80,7 +80,7 @@ static_assert (!is_variable (^^decomp));\n static_assert (!is_variable (^^decomp_ref));\n static_assert (is_variable (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_variable (dms));\n \n template<typename T, info R, info R2, info R3>\n--- gcc/testsuite/g++.dg/reflect/is_variable_template1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_variable_template1.C\t2026-03-24 23:13:58.545784417 +0100\n@@ -79,7 +79,7 @@ static_assert (!is_variable_template (^^\n static_assert (!is_variable_template (^^decomp_ref));\n static_assert (!is_variable_template (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_variable_template (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/is_volatile1.C.jj\t2026-01-15 16:33:47.011097891 +0100\n+++ gcc/testsuite/g++.dg/reflect/is_volatile1.C\t2026-03-24 23:13:58.548685331 +0100\n@@ -52,7 +52,7 @@ static_assert (!is_volatile (^^Concept))\n static_assert (!is_volatile (^^NSAlias));\n static_assert (!is_volatile (^^NS));\n static_assert (!is_volatile (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (!is_volatile (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n+static_assert (!is_volatile (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n \n int\n foo (int a, const long b, T c, int d[4], T &e)\n--- gcc/testsuite/g++.dg/reflect/mangle1.C.jj\t2026-01-15 16:33:47.012097874 +0100\n+++ gcc/testsuite/g++.dg/reflect/mangle1.C\t2026-03-24 23:41:54.125019058 +0100\n@@ -160,11 +160,11 @@ baz (int x)\n   bar <321, bases_of (^^NS2::S, ctx)[0]> (); // direct base class relationship\n   bar <322, bases_of (^^NS2::W <int>, ctx)[0]> (); // direct base class relationship\n   bar <323, bases_of (^^NS2::W <float>, ctx)[1]> (); // direct base class relationship\n-  bar <330, data_member_spec (^^S, { .name = \"member\" })> (); // data member description\n-  bar <331, data_member_spec (^^NS2::S, { .name = \"m\", .alignment = 16, .no_unique_address = true })> (); // data member description\n-  bar <332, data_member_spec (^^unsigned short, { .name = \"b\", .bit_width = 5 })> (); // data member description\n-  bar <333, data_member_spec (^^long, { .bit_width = 3 })> (); // data member description\n-  bar <334, data_member_spec (^^int, { .bit_width = 0 })> (); // data member description\n+  bar <330, std::meta::data_member_spec ({ .type = ^^S, .name = \"member\" })> (); // data member description\n+  bar <331, std::meta::data_member_spec ({ .type = ^^NS2::S, .name = \"m\", .alignment = 16, .no_unique_address = true })> (); // data member description\n+  bar <332, std::meta::data_member_spec ({ .type = ^^unsigned short, .name = \"b\", .bit_width = 5 })> (); // data member description\n+  bar <333, std::meta::data_member_spec ({ .type = ^^long, .bit_width = 3 })> (); // data member description\n+  bar <334, std::meta::data_member_spec ({ .type = ^^int, .bit_width = 0 })> (); // data member description\n   bar <340, ^^NS2::X::~X> (); // function\n }\n \n--- gcc/testsuite/g++.dg/reflect/object_of3.C.jj\t2026-02-03 09:13:41.678724631 +0100\n+++ gcc/testsuite/g++.dg/reflect/object_of3.C\t2026-03-24 23:13:58.554445900 +0100\n@@ -31,4 +31,4 @@ static_assert (!object_of_ok (^^fn));\n static_assert (!object_of_ok (annotations_of (^^foo)[0]));\n static_assert (!object_of_ok (reflect_constant (42)));\n static_assert (!object_of_ok (bases_of (^^B, access_context::unchecked ())[0]));\n-static_assert (!object_of_ok (data_member_spec (^^int, { .name = \"dms\" })));\n+static_assert (!object_of_ok (data_member_spec ({ .type = ^^int, .name = \"dms\" })));\n--- gcc/testsuite/g++.dg/reflect/offset_of1.C.jj\t2026-01-15 16:33:47.013097857 +0100\n+++ gcc/testsuite/g++.dg/reflect/offset_of1.C\t2026-03-24 23:13:58.557212888 +0100\n@@ -61,7 +61,7 @@ static_assert (!has_offset_of (^^Concept\n static_assert (!has_offset_of (^^NSAlias));\n static_assert (!has_offset_of (^^NS));\n static_assert (has_offset_of (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (!has_offset_of (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n+static_assert (!has_offset_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n void bar (long, const T f, int g[2], T &);\n \n int\n--- gcc/testsuite/g++.dg/reflect/operator_of1.C.jj\t2026-01-15 16:33:47.013097857 +0100\n+++ gcc/testsuite/g++.dg/reflect/operator_of1.C\t2026-03-24 23:13:58.560096009 +0100\n@@ -87,7 +87,7 @@ static_assert (!is_operator (^^decomp));\n static_assert (!is_operator (^^decomp_ref));\n static_assert (!is_operator (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!is_operator (dms));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/p2996-5.C.jj\t2026-01-15 16:33:47.013097857 +0100\n+++ gcc/testsuite/g++.dg/reflect/p2996-5.C\t2026-03-24 23:29:24.091611563 +0100\n@@ -46,5 +46,5 @@ constexpr auto r16 = ^^NS;       // repr\n constexpr auto r17 = std::meta::bases_of(^^S, std::meta::access_context::current ())[0];\n     // represents a direct base class relationship\n \n-constexpr auto r18 = std::meta::data_member_spec(^^int, {.name=\"member\"});\n+constexpr auto r18 = std::meta::data_member_spec({.type=^^int, .name=\"member\"});\n     // represents a data member description\n--- gcc/testsuite/g++.dg/reflect/p3394-1.C.jj\t2026-02-06 11:18:47.118639513 +0100\n+++ gcc/testsuite/g++.dg/reflect/p3394-1.C\t2026-03-24 23:37:02.250919407 +0100\n@@ -44,7 +44,7 @@ template <typename... Ts>\n struct Tuple {\n   struct storage;\n   consteval {\n-    define_aggregate (^^storage, { data_member_spec (^^Ts, { .name = \"_\" })... });\n+    define_aggregate (^^storage, { std::meta::data_member_spec ({ .type = ^^Ts, .name = \"_\" })... });\n   }\n   static constexpr auto ctx = std::meta::access_context::current ();\n   static constexpr auto nsdms\n--- gcc/testsuite/g++.dg/reflect/parent_of1.C.jj\t2026-01-15 16:33:47.014097840 +0100\n+++ gcc/testsuite/g++.dg/reflect/parent_of1.C\t2026-03-24 23:13:58.568683269 +0100\n@@ -90,7 +90,7 @@ static_assert (parent_of (^^decomp) == ^\n static_assert (parent_of (^^decomp_ref) == ^^::);\n static_assert (parent_of (^^arr) == ^^::);\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!has_parent_of (dms));\n \n constexpr auto ctx = std::meta::access_context::current ();\n--- gcc/testsuite/g++.dg/reflect/range_args.C.jj\t2026-01-15 16:33:47.014097840 +0100\n+++ gcc/testsuite/g++.dg/reflect/range_args.C\t2026-03-24 23:28:47.552225031 +0100\n@@ -79,10 +79,10 @@ static_assert (test_value_range (vv | st\n \t\t\t\t\t\t\t\t \n template<int> struct Aggr;\n constexpr info dmt[] = {\n-  data_member_spec(^^int, {.name = \"a\"}),\n-  data_member_spec(^^int, {.name = \"b\"}),\n-  data_member_spec(^^float, {.name = \"c\"}),\n-  data_member_spec(^^double, {.name = \"d\"}),\n+  data_member_spec({.type = ^^int, .name = \"a\"}),\n+  data_member_spec({.type =^^int, .name = \"b\"}),\n+  data_member_spec({.type =^^float, .name = \"c\"}),\n+  data_member_spec({.type = ^^double, .name = \"d\"}),\n };\n consteval bool of_int_type(info dm) {\n   return type_of(dm) == ^^int;\n--- gcc/testsuite/g++.dg/reflect/reflect_constant_array6.C.jj\t2026-03-02 07:43:12.514785254 +0100\n+++ gcc/testsuite/g++.dg/reflect/reflect_constant_array6.C\t2026-03-24 23:39:36.643327273 +0100\n@@ -30,7 +30,7 @@ namespace clap {\n     for (auto member :\n           nonstatic_data_members_of(spec, std::meta::access_context::current())) {\n       auto new_type = template_arguments_of(type_of(member))[0];\n-      new_members.push_back(data_member_spec(new_type, {.name=identifier_of(member)}));\n+      new_members.push_back(std::meta::data_member_spec({.type=new_type, .name=identifier_of(member)}));\n     }\n     return define_aggregate(opts, new_members);\n   }\n--- gcc/testsuite/g++.dg/reflect/return_type_of1.C.jj\t2026-01-15 16:33:47.015097823 +0100\n+++ gcc/testsuite/g++.dg/reflect/return_type_of1.C\t2026-03-24 23:13:58.577210882 +0100\n@@ -77,7 +77,7 @@ static_assert (!has_return_type_of (^^Co\n static_assert (!has_return_type_of (^^NSAlias));\n static_assert (!has_return_type_of (^^NS));\n static_assert (!has_return_type_of (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (!has_return_type_of (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n+static_assert (!has_return_type_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n \n struct V\n {\n--- gcc/testsuite/g++.dg/reflect/size_of1.C.jj\t2026-01-15 16:33:47.015097823 +0100\n+++ gcc/testsuite/g++.dg/reflect/size_of1.C\t2026-03-24 23:13:58.580041954 +0100\n@@ -63,9 +63,9 @@ static_assert (!has_size_of (^^Concept))\n static_assert (!has_size_of (^^NSAlias));\n static_assert (!has_size_of (^^NS));\n static_assert (has_size_of (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (has_size_of (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n-static_assert (!has_size_of (std::meta::data_member_spec (^^int, { .name = \"member\", .bit_width = 6 })));\n-static_assert (!has_size_of (std::meta::data_member_spec (^^int, { .bit_width = 15 })));\n+static_assert (has_size_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n+static_assert (!has_size_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\", .bit_width = 6 })));\n+static_assert (!has_size_of (std::meta::data_member_spec ({ .type = ^^int, .bit_width = 15 })));\n static_assert (!has_size_of (^^arr2));\n static_assert (has_size_of (^^arr3));\n static_assert (!has_size_of (^^ref));\n@@ -75,7 +75,7 @@ static_assert (size_of (^^Alias) == size\n static_assert (size_of (^^S) == sizeof (S));\n static_assert (size_of (^^S::mem) == sizeof (S::mem));\n static_assert (size_of (std::meta::bases_of (^^S, ctx)[0]) == sizeof (B));\n-static_assert (size_of (std::meta::data_member_spec (^^int, { .name = \"member\" })) == sizeof (int));\n+static_assert (size_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })) == sizeof (int));\n static_assert (size_of (^^arr3) == sizeof (arr3));\n using fnt = int (int, int);\n static_assert (!has_size_of (^^fnt));\n--- gcc/testsuite/g++.dg/reflect/source_location_of1.C.jj\t2026-01-15 16:33:47.015097823 +0100\n+++ gcc/testsuite/g++.dg/reflect/source_location_of1.C\t2026-03-24 23:13:58.582885335 +0100\n@@ -31,7 +31,7 @@ static_assert (source_location_of (^^I).\n static_assert (source_location_of (dealias (^^I)).line () == std::source_location ().line ());\n typedef S J;\n static_assert (source_location_of (dealias (^^J)).line () == source_location_of (^^S).line ());\n-static_assert (source_location_of (data_member_spec (^^int, { .name = \"_\" })).line () == std::source_location ().line ());\n+static_assert (source_location_of (data_member_spec ({ .type = ^^int, .name = \"_\" })).line () == std::source_location ().line ());\n constexpr auto ctx = access_context::current ();\n struct V {};\n struct Y { int a, b, c; };\n--- gcc/testsuite/g++.dg/reflect/splice1.C.jj\t2026-01-15 16:33:47.015097823 +0100\n+++ gcc/testsuite/g++.dg/reflect/splice1.C\t2026-03-24 23:13:58.585731874 +0100\n@@ -23,6 +23,6 @@ foo ()\n   s.[: (members_of (^^S, ctx) | std::views::filter (is_copy_constructor) | std::ranges::to <std::vector> ())[0] :] (t);\t\t// { dg-error \"cannot use constructor or destructor .constexpr S::S\\\\(const S&\\\\). in a splice expression\" }\n   s.[: (members_of (^^S, ctx) | std::views::filter (is_destructor) | std::ranges::to <std::vector> ())[0] :] ();\t\t// { dg-error \"cannot use constructor or destructor .constexpr S::~S\\\\(\\\\). in a splice expression\" }\n   [: annotations_of (^^foo)[0] :]; // { dg-error \"cannot use an annotation .1. in a splice expression\" }\n-  [: data_member_spec (^^S, { .name = \"name\" }) :]; // { dg-error \"cannot use a data member specification in a splice expression\" }\n+  [: data_member_spec ({ .type = ^^S, .name = \"name\" }) :]; // { dg-error \"cannot use a data member specification in a splice expression\" }\n   [: bases_of (^^T, ctx)[0] :];\t\t\t\t\t\t\t\t\t\t\t\t\t// { dg-error \"\" \"\" { xfail *-*-* } }\n }\n--- gcc/testsuite/g++.dg/reflect/storage_duration2.C.jj\t2026-01-15 16:33:47.015097823 +0100\n+++ gcc/testsuite/g++.dg/reflect/storage_duration2.C\t2026-03-24 23:13:58.588412288 +0100\n@@ -188,7 +188,7 @@ static_assert (has_static_storage_durati\n static_assert (!has_thread_storage_duration (^^arr));\n static_assert (!has_automatic_storage_duration (^^arr));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!has_static_storage_duration (dms));\n static_assert (!has_thread_storage_duration (dms));\n static_assert (!has_automatic_storage_duration (dms));\n--- gcc/testsuite/g++.dg/reflect/substitute1.C.jj\t2026-01-15 16:33:47.015097823 +0100\n+++ gcc/testsuite/g++.dg/reflect/substitute1.C\t2026-03-24 23:13:58.591374800 +0100\n@@ -90,7 +90,7 @@ static_assert (!could_substitute (^^deco\n static_assert (!could_substitute (^^decomp_ref, {}));\n static_assert (!could_substitute (^^arr, {}));\n \n-constexpr auto dms = data_member_spec (^^int, { .name = \"dms\" });\n+constexpr auto dms = data_member_spec ({ .type = ^^int, .name = \"dms\" });\n static_assert (!could_substitute (dms, {}));\n \n struct Base {};\n--- gcc/testsuite/g++.dg/reflect/type_of1.C.jj\t2026-01-15 16:33:47.016097806 +0100\n+++ gcc/testsuite/g++.dg/reflect/type_of1.C\t2026-03-24 23:13:58.594278207 +0100\n@@ -61,10 +61,10 @@ static_assert (!has_type (^^Concept));\n static_assert (!has_type (^^NSAlias));\n static_assert (!has_type (^^NS));\n static_assert (has_type (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (has_type (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n-static_assert (has_type (std::meta::data_member_spec (^^int, { .name = \"member\", .bit_width = 6 })));\n-static_assert (has_type (std::meta::data_member_spec (^^int, { .bit_width = 0 })));\n-static_assert (has_type (std::meta::data_member_spec (^^int, { .bit_width = 5 })));\n+static_assert (has_type (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n+static_assert (has_type (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\", .bit_width = 6 })));\n+static_assert (has_type (std::meta::data_member_spec ({ .type = ^^int, .bit_width = 0 })));\n+static_assert (has_type (std::meta::data_member_spec ({ .type = ^^int, .bit_width = 5 })));\n void bar (long, const T f, int g[2], T &);\n \n int\n@@ -117,11 +117,11 @@ static_assert (type_of (^^S::mem) == ^^i\n static_assert (type_of (^^U::v) == ^^int);\n static_assert (type_of (std::meta::members_of (^^S, ctx)[1]) == ^^int);\n static_assert (type_of (std::meta::bases_of (^^S, ctx)[0]) == ^^B);\n-static_assert (type_of (std::meta::data_member_spec (^^int, { .name = \"member\" })) == ^^int);\n-static_assert (type_of (std::meta::data_member_spec (^^const long, { .name = \"member\", .bit_width = 8 })) == ^^const long);\n-static_assert (type_of (std::meta::data_member_spec (^^int3, { .name = \"member\" })) == ^^int[3]);\n-static_assert (type_of (std::meta::data_member_spec (^^int, { .bit_width = 7 })) == ^^int);\n-static_assert (type_of (std::meta::data_member_spec (^^int, { .bit_width = 0 })) == ^^int);\n+static_assert (type_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })) == ^^int);\n+static_assert (type_of (std::meta::data_member_spec ({ .type = ^^const long, .name = \"member\", .bit_width = 8 })) == ^^const long);\n+static_assert (type_of (std::meta::data_member_spec ({ .type = ^^int3, .name = \"member\" })) == ^^int[3]);\n+static_assert (type_of (std::meta::data_member_spec ({ .type = ^^int, .bit_width = 7 })) == ^^int);\n+static_assert (type_of (std::meta::data_member_spec ({ .type = ^^int, .bit_width = 0 })) == ^^int);\n \n consteval int\n test (info x, info y)\n--- gcc/testsuite/g++.dg/reflect/u8display_string_of1.C.jj\t2026-03-13 09:13:00.750606165 +0100\n+++ gcc/testsuite/g++.dg/reflect/u8display_string_of1.C\t2026-03-24 23:13:58.597110034 +0100\n@@ -115,10 +115,10 @@ foo (int a, const long b, T c, int d[4],\n   static_assert (u8display_string_of (^^NSAlias) == u8\"NSAlias\");\n   static_assert (u8display_string_of (^^NS) == u8\"NS\");\n   static_assert (u8display_string_of (bases_of (^^S, ctx)[0]) == u8\"S: B\");\n-  static_assert (u8display_string_of (data_member_spec (^^int, { .name = \"member\", .alignment = 128, .no_unique_address = true })) == u8\"(int, member, 128, , true)\");\n-  static_assert (u8display_string_of (data_member_spec (^^const int, { .name = \"member\", .bit_width = 6 })) == u8\"(const int, member, , 6, false)\");\n-  static_assert (u8display_string_of (data_member_spec (^^int, { .bit_width = 0 })) == u8\"(int, , , 0, false)\");\n-  static_assert (u8display_string_of (data_member_spec (^^long, { .bit_width = 5 })) == u8\"(long int, , , 5, false)\");\n+  static_assert (u8display_string_of (data_member_spec ({ .type = ^^int, .name = \"member\", .alignment = 128, .no_unique_address = true })) == u8\"(int, member, 128, , true)\");\n+  static_assert (u8display_string_of (data_member_spec ({ .type = ^^const int, .name = \"member\", .bit_width = 6 })) == u8\"(const int, member, , 6, false)\");\n+  static_assert (u8display_string_of (data_member_spec ({ .type = ^^int, .bit_width = 0 })) == u8\"(int, , , 0, false)\");\n+  static_assert (u8display_string_of (data_member_spec ({ .type = ^^long, .bit_width = 5 })) == u8\"(long int, , , 5, false)\");\n   static_assert (u8display_string_of (annotations_of (^^bar)[0]) == u8\"[[=1]]\");\n   static_assert (u8display_string_of (annotations_of (^^bar)[1]) == u8\"[[=AN{1, 42, ' '}]]\");\n   static_assert (u8display_string_of (^^int) == u8\"int\");\n--- gcc/testsuite/g++.dg/reflect/u8identifier_of1.C.jj\t2026-01-15 16:33:47.017097789 +0100\n+++ gcc/testsuite/g++.dg/reflect/u8identifier_of1.C\t2026-03-24 23:13:58.600135336 +0100\n@@ -29,8 +29,8 @@ static_assert (u8identifier_of (^^E1) ==\n static_assert (u8identifier_of (^^E) == std::u8string_view (u8\"E\"));\n static_assert (u8identifier_of (parent_of (^^E5)) == std::u8string_view (u8\"E7\"));\n static_assert (u8identifier_of (^^E7) == std::u8string_view (u8\"E7\"));\n-static_assert (u8identifier_of (data_member_spec (^^long, { .name = u8\"foo\", .bit_width = 6 })) == std::u8string_view (u8\"foo\"));\n-static_assert (u8identifier_of (data_member_spec (^^long, { .name = u8\"extremely_long_string_used_as_identifier\" })) == std::u8string_view (u8\"extremely_long_string_used_as_identifier\"));\n+static_assert (u8identifier_of (data_member_spec ({ .type = ^^long, .name = u8\"foo\", .bit_width = 6 })) == std::u8string_view (u8\"foo\"));\n+static_assert (u8identifier_of (data_member_spec ({ .type = ^^long, .name = u8\"extremely_long_string_used_as_identifier\" })) == std::u8string_view (u8\"extremely_long_string_used_as_identifier\"));\n \n namespace N {}\n namespace NA = N;\n--- gcc/testsuite/g++.dg/reflect/variable_of1.C.jj\t2026-01-15 16:33:47.017097789 +0100\n+++ gcc/testsuite/g++.dg/reflect/variable_of1.C\t2026-03-24 23:13:58.602966156 +0100\n@@ -60,7 +60,7 @@ static_assert (!has_variable_of (^^Conce\n static_assert (!has_variable_of (^^NSAlias));\n static_assert (!has_variable_of (^^NS));\n static_assert (!has_variable_of (std::meta::bases_of (^^S, ctx)[0]));\n-static_assert (!has_variable_of (std::meta::data_member_spec (^^int, { .name = \"member\" })));\n+static_assert (!has_variable_of (std::meta::data_member_spec ({ .type = ^^int, .name = \"member\" })));\n \n void\n bar (long, const T f, int g[2], T &)\n--- gcc/testsuite/g++.dg/reflect/visibility1.C.jj\t2026-01-20 15:31:42.711771500 +0100\n+++ gcc/testsuite/g++.dg/reflect/visibility1.C\t2026-03-24 23:38:58.495967739 +0100\n@@ -42,7 +42,7 @@ bar (int x)\n   foo <102, parameters_of (^^baz)[0]> ();\t// { dg-final { scan-assembler-not \"\\t.weak\\t_Z3fooILi102EL\" } } - param of TU-local fn\n   foo <103, bases_of (^^C, ctx)[0]> ();\t\t// { dg-final { scan-assembler-not \"\\t.weak\\t_Z3fooILi103EL\" } } - direct base relationship with TU-local derived\n   foo <104, bases_of (^^D, ctx)[0]> ();\t\t// { dg-final { scan-assembler-not \"\\t.weak\\t_Z3fooILi104EL\" } } - direct base relationship with TU-local base\n-  foo <105, data_member_spec (^^B, { .name = \"foo\" })> (); // { dg-final { scan-assembler-not \"\\t.weak\\t_Z3fooILi105EL\" } } - data member spec with TU-local type\n+  foo <105, std::meta::data_member_spec ({ .type = ^^B, .name = \"foo\" })> (); // { dg-final { scan-assembler-not \"\\t.weak\\t_Z3fooILi105EL\" } } - data member spec with TU-local type\n }\n \n inline void\n@@ -113,7 +113,7 @@ xyzzy (int x)\n   foo <127, std::meta::info {}> ();\t\t// { dg-final { scan-assembler \"\\t.weak\\t_Z3fooILi127EL\" { target *-*-linux* } } } - null reflection\n   foo <128, ^^b> ();\t\t\t\t// { dg-final { scan-assembler \"\\t.weak\\t_Z3fooILi128EL\" { target *-*-linux* } } } - public variable\n   foo <129, ^^c> ();\t\t\t\t// { dg-final { scan-assembler-not \"\\t.weak\\t_Z3fooILi129EL\" } } - TU-local variable\n-  foo <130, data_member_spec (^^D, { .name = \"foo\" })> (); // { dg-final { scan-assembler \"\\t.weak\\t_Z3fooILi130EL\" { target *-*-linux* } } } - data member spec with public type\n+  foo <130, std::meta::data_member_spec ({ .type = ^^D, .name = \"foo\" })> (); // { dg-final { scan-assembler \"\\t.weak\\t_Z3fooILi130EL\" { target *-*-linux* } } } - data member spec with public type\n   foo <131, bases_of (^^H, ctx)[0]> ();\t\t// { dg-final { scan-assembler \"\\t.weak\\t_Z3fooILi131EL\" { target *-*-linux* } } } - direct base relationship with both types public\n   plugh <42> (x);\n   garply <42> (x);\n","prefixes":["RFC"]}