DEFTRAIT_EXPR (IS_UNION, "__is_union", 1)
DEFTRAIT_EXPR (REF_CONSTRUCTS_FROM_TEMPORARY, "__reference_constructs_from_temporary", 2)
DEFTRAIT_EXPR (REF_CONVERTS_FROM_TEMPORARY, "__reference_converts_from_temporary", 2)
-DEFTRAIT_EXPR (IS_DEDUCIBLE, "__is_deducible", 2)
+/* FIXME Added space to avoid direct usage in GCC 13. */
+DEFTRAIT_EXPR (IS_DEDUCIBLE, "__is_deducible ", 2)
DEFTRAIT_TYPE (REMOVE_CV, "__remove_cv", 1)
DEFTRAIT_TYPE (REMOVE_REFERENCE, "__remove_reference", 1)
If @code{type} is a cv-qualified class type, and not a union type
([basic.compound]) the trait is @code{true}, else it is @code{false}.
-@item __is_deducible (template, type)
-If template arguments for @code{template} can be deduced from
-@code{type} or obtained from default template arguments.
+@c FIXME Commented out for GCC 13, discuss user interface for GCC 14.
+@c @item __is_deducible (template, type)
+@c If template arguments for @code{template} can be deduced from
+@c @code{type} or obtained from default template arguments.
@item __is_empty (type)
If @code{__is_class (type)} is @code{false} then the trait is @code{false}.
// { dg-do compile { target c++20 } }
+#if __has_builtin (__is_deducible)
+
template <class T> struct A { };
template <class T> struct B { };
template <class T, T N> using E = int[N];
static_assert (__is_deducible (E, int[42]));
+#endif // __has_builtin (__is_deducible)
+
// We don't try to support this.
template <class T> void f(T);
-bool b = __is_deducible (f, void (int)); // { dg-error "class or alias" }
+bool b = __is_deducible (f, void (int)); // { dg-error "" }