// PR c++/88095
// Test class non-type template parameters for literal operator templates.
// Validate support for class template argument deduction.
// { dg-do compile { target c++20 } }

namespace std {
using size_t = decltype(sizeof(int));
}

template <typename CharT, std::size_t N>
struct fixed_string {
  constexpr static std::size_t length = N;
  constexpr fixed_string(...) { }
  // auto operator<=> (const fixed_string&) = default;
};
template <typename CharT, std::size_t N>
fixed_string(const CharT (&str)[N]) -> fixed_string<CharT, N>;

template <fixed_string fs>
constexpr std::size_t operator"" _udl() {
  return decltype(fs)::length;
}

static_assert("test"_udl == 5);
