https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119017
Bug ID: 119017 Summary: error on valid user defined literal Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: tiagomacarios at gmail dot com Target Milestone: --- The following code compiles fine with clang and MSVC. gcc errors https://godbolt.org/z/1MPvrjfaK ``` #include <cstddef> template <typename char_type> struct S { friend consteval S<char> operator""_S(const char*, size_t) noexcept; friend consteval S<wchar_t> operator""_S(const wchar_t*, size_t) noexcept; friend consteval S<char16_t> operator""_S(const char16_t*, size_t) noexcept; friend consteval S<char32_t> operator""_S(const char32_t*, size_t) noexcept; }; inline consteval S<char> operator""_S(const char* str, size_t) noexcept { return S<char>{}; } inline consteval S<wchar_t> operator""_S(const wchar_t* str, size_t) noexcept { return S<wchar_t>{}; } inline consteval S<char16_t> operator""_S(const char16_t* str, size_t) noexcept { return S<char16_t>{}; } inline consteval S<char32_t> operator""_S(const char32_t* str, size_t) noexcept { return S<char32_t>{}; } constexpr auto a = "a"_S; ``` Error: ``` <source>:5:30: error: 'consteval S<char> operator""_S(const char*, size_t)' has invalid argument list [-Wtemplate-body] 5 | friend consteval S<char> operator""_S(const char*, size_t) noexcept; | ^~~~~~~~ <source>:6:33: error: 'consteval S<wchar_t> operator""_S(const wchar_t*, size_t)' has invalid argument list [-Wtemplate-body] 6 | friend consteval S<wchar_t> operator""_S(const wchar_t*, size_t) noexcept; | ^~~~~~~~ <source>:7:34: error: 'consteval S<char16_t> operator""_S(const char16_t*, size_t)' has invalid argument list [-Wtemplate-body] 7 | friend consteval S<char16_t> operator""_S(const char16_t*, size_t) noexcept; | ^~~~~~~~ <source>:8:34: error: 'consteval S<char32_t> operator""_S(const char32_t*, size_t)' has invalid argument list [-Wtemplate-body] 8 | friend consteval S<char32_t> operator""_S(const char32_t*, size_t) noexcept; | ^~~~~~~~ Compiler returned: 1 ```