[thread.req.paramname] # 32 Concurrency support library [[thread]](./#thread) ## 32.2 Requirements [[thread.req]](thread.req#paramname) ### 32.2.1 Template parameter names [thread.req.paramname] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/threads.tex#L31) Throughout this Clause, the names of template parameters are used to express type requirements[.](#1.sentence-1) Predicate is a function object type ([[function.objects]](function.objects "22.10 Function objects"))[.](#1.sentence-2) Let pred denote an lvalue of type Predicate[.](#1.sentence-3) Then the expression pred() shall be well-formed and the type decltype(pred()) shall model[*boolean-testable*](concept.booleantestable#concept:boolean-testable "18.5.2 Boolean testability [concept.booleantestable]") ([[concept.booleantestable]](concept.booleantestable "18.5.2 Boolean testability"))[.](#1.sentence-4) The return value of pred(), converted to bool, yields true if the corresponding test condition is satisfied, andfalse otherwise[.](#1.sentence-5) If a template parameter is named Clock, the corresponding template argument shall be a type C that meets the [*Cpp17Clock*](time.clock.req#:Cpp17Clock "30.3 Cpp17Clock requirements [time.clock.req]") requirements ([[time.clock.req]](time.clock.req "30.3 Cpp17Clock requirements")); the program is ill-formed if is_clock_v is false[.](#1.sentence-6)