This works since the recent r11-7102, but we didn't have a test for a template-argument context.
Tested x86_64-pc-linux-gnu, applying to trunk. gcc/testsuite/ChangeLog: PR c++/96268 * g++.dg/cpp2a/nontype-class41.C: New test. --- gcc/testsuite/g++.dg/cpp2a/nontype-class41.C | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp2a/nontype-class41.C diff --git a/gcc/testsuite/g++.dg/cpp2a/nontype-class41.C b/gcc/testsuite/g++.dg/cpp2a/nontype-class41.C new file mode 100644 index 00000000000..2be88437072 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/nontype-class41.C @@ -0,0 +1,13 @@ +// PR c++/96268 +// { dg-do compile { target c++20 } } + +template <int N> +struct static_string { char chars[N]; /* operator<=> */ }; + +template <int N> +static_string(char const(&)[N]) -> static_string<N>; + +static_string hi = {"hi"}; + +template <static_string str> struct name {}; +using Hi = name<{"hi"}>; base-commit: bc56d27de97ecea813279ce5ba45b278dcccfe21 -- 2.29.2