[/
 / Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 /
 / Distributed under the Boost Software License, Version 1.0. (See accompanying
 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 /]

[section:ConnectCondition Connect condition requirements]

A type `X` meets the `ConnectCondition` requirements if it satisfies the
requirements of `Destructible` (C++Std [destructible]) and
`CopyConstructible` (C++Std [copyconstructible]), as well as the additional
requirements listed below.

In the table below, `x` denotes a value of type `X`, `ec` denotes a (possibly
const) value of type `error_code`, and `ep` denotes a (possibly const) value of
some type satisfying the [link asio.reference.Endpoint endpoint] requirements.

[table ConnectCondition requirements
  [[expression] [return type] [assertion/note\npre/post-condition]]
  [
    [`x(ec, ep)`]
    [`bool`]
    [
      Returns `true` to indicate that the `connect` or `async_connect`
      algorithm should attempt a connection to the endpoint `ep`. Otherwise,
      returns `false` to indicate that the algorithm should not attempt
      connection to the endpoint `ep`, and should instead skip to the next
      endpoint in the sequence.
    ]
  ]
]

[endsect]
