Especificar un concepto para un tipo que tiene una plantilla de función miembro usando Concepts Lite

Estoy tratando de especificar un concepto para restringir un tipo de tipo superior que tiene una plantilla de función miembro usando Concepts Lite. Sin embargo, no puedo encontrar dentro delespecificación técnica o latutorial una cláusula que trata con declaraciones con plantilla dentro de un concepto.

¿Cómo se hace esto?

Ejemplo: supongamos que tengo el tipo de clase superiorHKT con una plantilla de función miembroF:

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

y que ahora quiero especificar un concepto para restringir estos tipos de tipo superior:

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>; 
  }
}

Tenga en cuenta que podría hacer algo como:

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

pero esto significa que necesito saberU en el sitio de restricción.

Realmente no me importa si la sustitución de un determinadoU falla o no, aunque puedo ver por qué esto podría ser un problema: p. aplique una restricción para asegurarse de que su función no falla y luego falla porque la restricción se cumplió pero en el momento de la instanciación la sustitución falló en la plantilla de función miembro (¿ayudaría si la plantilla de función miembro estuviera restringida?).

Respuestas a la pregunta(2)

Su respuesta a la pregunta