| Template | Condition | Comments | |
| template<class T, class U> struct is_same; | T and U name the same type with the same cv-qualifications | ||
| Base is a base class of Derived ([class.derived])
 without regard to cv-qualifiers
 or Base and Derived are not unions and
 name the same class type
 without regard to cv-qualifiers | |||
| see below | |||
| is_convertible_v<From, To> is true and
 the conversion, as defined by is_convertible,
 is known not to throw any exceptions ([expr.unary.noexcept]) | |||
| Derived is unambiguously derived from Base
 without regard to cv-qualifiers,
 and each object of type Derived
 is pointer-interconvertible ([basic.compound]) with
 its Base subobject,
 or Base and Derived are not unions
 and name the same class type
 without regard to cv-qualifiers. | If Base and Derived are non-union class types
 and are not (possibly cv-qualified versions of) the same type,
 Derived shall be a complete type. | ||
| The expression INVOKE(declval<Fn>(), declval<ArgTypes>()...) ([func.require])
 is well-formed when treated as an unevaluated operand ([expr.context]) | Fn and all types in the template parameter pack ArgTypes
 shall be complete types, cv void, or
 arrays of unknown bound. | ||
| The expression INVOKE<R>(declval<Fn>(), declval<ArgTypes>()...)
 is well-formed when treated as an unevaluated operand | Fn, R, and all types in the template parameter pack ArgTypes
 shall be complete types, cv void, or
 arrays of unknown bound. | ||
| is_invocable_v< Fn, ArgTypes...> is true and the expression INVOKE(declval<Fn>(), declval<ArgTypes>()...) is known not to throw any exceptions ([expr.unary.noexcept]) | Fn and all types in the template parameter pack ArgTypes
 shall be complete types, cv void, or
 arrays of unknown bound. | ||
| is_invocable_r_v< R, Fn, ArgTypes...> is true and the expression INVOKE<R>(declval<Fn>(), declval<ArgTypes>()...) is known not to throw any exceptions ([expr.unary.noexcept]) | Fn, R, and all types in the template parameter pack ArgTypes
 shall be complete types, cv void, or
 arrays of unknown bound. |