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

Reply via email to