7 Expressions [expr]

7.5 Primary expressions [expr.prim]

7.5.7 Requires expressions [expr.prim.req] Type requirements [expr.prim.req.type]

	typename nested-name-specifier type-name ;
A type-requirement asserts the validity of a type.
The enclosing requires-expression will evaluate to false if substitution of template arguments fails.
— end note
template<typename T, typename T::type = 0> struct S;
template<typename T> using Ref = T&;

template<typename T> concept C = requires {
  typename T::inner;    // required nested member name
  typename S<T>;        // required class template specialization
  typename Ref<T>;      // required alias template substitution, fails if T is void
— end example
A type-requirement that names a class template specialization does not require that type to be complete ([basic.types]).