// { dg-do compile { target c++20 } }
// { dg-additional-options "-fconcepts-ts -fconcepts-diagnostics-depth=2" }

// Test conversion requirements (not in C++20)

// req9.C

template<typename T>
struct S1 { };

template<typename T>
concept C = requires(T x) { { x.fn() } -> S1<T>; };

template<typename U>
  requires C<U>
void fn(U x)
{
  x.fn();
}

struct S2
{
  auto fn() const { return S1<S2>(); }
};

int driver_1()
{
  fn(S2{});
  return 0;
}

// req10.C
// Test implicit conversion requirements

template<typename T, typename U>
concept ConvertibleTo = requires(T& t) { {t} -> U&; }; // { dg-error "inaccessible" }

struct B { };
class D : /*private*/ B { };

void driver_2()
{
  static_assert(ConvertibleTo<D, B>()); // { dg-error "cannot call" }
  static_assert(ConvertibleTo<D, B>); // { dg-error "static assertion failed" }
}
