Указание концепции для типа, который имеет шаблон функции-члена, используя Concepts Lite

Я пытаюсь указать концепцию, чтобы ограничить тип с более высоким родом, который имеет шаблон функции-члена, используя Concepts Lite. Однако я не могу найти внутритехническая спецификация илируководство пункт, касающийся шаблонных утверждений внутри концепции.

Как это сделать?

Пример: предположим, у меня более высокий типHKT с шаблоном функции-членаF:

template<class T>
struct HKT {
  template<class U> // this looks like e.g. rebind in std::allocators
  auto F(U) -> HKT<U>;
};

и что теперь я хочу указать концепцию для ограничения этих типов с более высоким родом:

template <template <class> class HKT, class T>
concept HKTWithTemplateMemberFunctionF {
  return requires(HKT<T> h) { // HKT<T> is a type, h is an object
    // HKT<T> needs to have a member function template that 
    // returns HTK<U> where the type U is to be deduced and
    // it can be any type (it is unconstrained)
    template<class U>  // is there a syntax for this?
    h.F(std::declval<U>()) -> HKT<U>; 
  }
}

Обратите внимание, что я мог бы сделать что-то вроде:

template <template <class> class HKT, class T, class U>
concept HKTWithTemplateMemberFunctionF {
  return requires(HKT<T> h) {
      h.F(std::declval<U>()) -> HKT<U>;
  }
}

но это значит что мне нужно знатьU на сайте ограничения.

Мне действительно все равно, если замена для данногоU не удается или нет, хотя я понимаю, почему это может быть проблемой: например, примените ограничение, чтобы убедиться, что ваша функция не завершается с ошибкой, а затем завершается сбоем, потому что ограничение было выполнено, но во время создания экземпляра произошла ошибка в шаблоне функции-члена (поможет ли это, если шаблон функции-члена был ограничен?).

Ответы на вопрос(2)

Ваш ответ на вопрос