|  | 
A customisation point that applies a concept-preserving property to an object.
constexpr unspecified require = unspecified;
        The name require denotes
        a customisation point object. The expression asio::require(E,
        P0, Pn...)
        for some subexpressions E
        and P0, and where Pn... represents
        N subexpressions (where
        N is 0 or more, and with
        types T =
        decay_t<decltype(E)>
        and Prop0 =
        decay_t<decltype(P0)>)
        is expression-equivalent to:
      
is_applicable_property_v<T, Prop0> &&
            Prop0::is_requirable is not a well-formed
            constant expression with value true,
            asio::require(E, P0, Pn...)
            is ill-formed.
          E if N == 0 and the expression Prop0::template static_query_v<T> == Prop0::value() is a well-formed constant expression
            with value true.
          (E).require(P0) if N
            == 0
            and the expression (E).require(P0) is a valid expression.
          require(E, P0)
            if N ==
            0 and the expression require(E, P0)
            is a valid expression with overload resolution performed in a context
            that does not include the declaration of the require
            customization point object.
          asio::require(asio::require(E, P0), Pn...)
            if N >
            0 and the expression asio::require(asio::require(E, P0), Pn...)
            is a valid expression.
          asio::require(E, P0, Pn...)
            is ill-formed.
          
        Header: asio/require.hpp
      
        Convenience header: asio.hpp