7 Expressions [expr]

7.5 Primary expressions [expr.prim]

7.5.7 Requires expressions [expr.prim.req]

7.5.7.2 Type requirements [expr.prim.req.type]

type-requirement:
	typename nested-name-specifier type-name ;
A type-requirement asserts the validity of a type.
Note
:
The enclosing requires-expression will evaluate to false if substitution of template arguments fails.
— end note
 ]
Example
:
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]).