21 Internet protocol [internet]

21.15 Class template ip::basic_resolver_results [internet.resolver.results]

An object of type basic_resolver_results<InternetProtocol> represents a sequence of basic_resolver_entry<InternetProtocol> elements resulting from a single name resolution operation.

namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
namespace ip {

  template<class InternetProtocol>
  class basic_resolver_results
  {
  public:
    // types:
    using protocol_type = InternetProtocol;
    using endpoint_type = typename protocol_type::endpoint;
    using value_type = basic_resolver_entry<protocol_type>;
    using const_reference = const value_type&;
    using reference = value_type&;
    using const_iterator = implementation-defined;
    using iterator = const_iterator;
    using difference_type = ptrdiff_t;
    using size_type = size_t;

    // [internet.resolver.results.cons], construct / copy / destroy:
    basic_resolver_results();
    basic_resolver_results(const basic_resolver_results& rhs);
    basic_resolver_results(basic_resolver_results&& rhs) noexcept;
    basic_resolver_results& operator=(const basic_resolver_results& rhs);
    basic_resolver_results& operator=(basic_resolver_results&& rhs);
    ~basic_resolver_results();

    // [internet.resolver.results.size], size:
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    bool empty() const noexcept;

    // [internet.resolver.results.access], element access:
    const_iterator begin() const;
    const_iterator end() const;
    const_iterator cbegin() const;
    const_iterator cend() const;

    // [internet.resolver.results.swap], swap:
    void swap(basic_resolver_results& that) noexcept;
  };

  // [internet.resolver.results.comparisons], basic_resolver_results comparisons:
  template<class InternetProtocol>
    bool operator==(const basic_resolver_results<InternetProtocol>& a,
                    const basic_resolver_results<InternetProtocol>& b);
  template<class InternetProtocol>
    bool operator!=(const basic_resolver_results<InternetProtocol>& a,
                    const basic_resolver_results<InternetProtocol>& b);

} // namespace ip
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std

The class template basic_resolver_results satisfies the requirements of a sequence container (C++ 2014 [sequence.reqmts]), except that only the operations defined for const-qualified sequence containers are supported. The class template basic_resolver_results supports forward iterators.

A default-constructed basic_resolver_results object is empty. A non-empty results object is obtained only by calling a basic_resolver object's wait or async_wait operations, or otherwise by copy construction, move construction, assignment, or swap from another non-empty results object.

21.15.1 ip::basic_resolver_results constructors [internet.resolver.results.cons]

basic_resolver_results();

Postconditions: size() == 0.

basic_resolver_results(const basic_resolver_results& rhs);

Postconditions: *this == rhs.

basic_resolver_results(basic_resolver_results&& rhs) noexcept;

Postconditions: *this is equal to the prior value of rhs.

21.15.2 ip::basic_resolver_results assignment [internet.resolver.results.assign]

basic_resolver_results& operator=(const basic_resolver_results& rhs);

Postconditions: *this == rhs.

Returns: *this.

basic_resolver_results& operator=(basic_resolver_results& rhs) noexcept;

Postconditions: *this is equal to the prior value of rhs.

Returns: *this.

21.15.3 ip::basic_resolver_results size [internet.resolver.results.size]

size_type size() const noexcept;

Returns: The number of basic_resolver_entry elements in *this.

size_type max_size() const noexcept;

Returns: The maximum number of basic_resolver_entry elements that can be stored in *this.

bool empty() const noexcept;

Returns: size() == 0.

21.15.4 ip::basic_resolver_results element access [internet.resolver.results.access]

const_iterator begin() const; const_iterator cbegin() const;

Returns: A starting iterator that enumerates over all the basic_resolver_entry elements stored in *this.

const_iterator end() const; const_iterator cend() const;

Returns: A terminating iterator that enumerates over all the basic_resolver_entry elements stored in *this.

21.15.5 ip::basic_resolver_results swap [internet.resolver.results.swap]

void swap(basic_resolver_results& that) noexcept;

Postconditions: *this is equal to the prior value of that, and that is equal to the prior value of *this.

21.15.6 ip::basic_resolver_results comparisons [internet.resolver.results.comparisons]

template<class InternetProtocol> bool operator==(const basic_resolver_results<InternetProtocol>& a, const basic_resolver_results<InternetProtocol>& b);

Returns: a.size() == b.size() && equal(a.cbegin(), a.cend(), b.cbegin()).

template<class InternetProtocol> bool operator!=(const basic_resolver_results<InternetProtocol>& a, const basic_resolver_results<InternetProtocol>& b);

Returns: !(a == b).