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
```