[range.utility.conv.to] (original) (raw)

25 Ranges library [ranges]

25.5 Range utilities [range.utility]

25.5.7 Range conversions [range.utility.conv]

25.5.7.2 ranges​::​to [range.utility.conv.to]

template<class C, [input_range](range.refinements#concept:input%5Frange "25.4.5 Other range refinements [range.refinements]") R, class... Args> requires (![view](range.view#concept:view "25.4.4 Views [range.view]")<C>) constexpr C to(R&& r, Args&&... args);

Mandates: C is a cv-unqualified class type.

Returns: An object of type Cconstructed from the elements of r in the following manner:

template<template<class...> class C, [input_range](range.refinements#concept:input%5Frange "25.4.5 Other range refinements [range.refinements]") R, class... Args> constexpr auto to(R&& r, Args&&... args);

Let input-iterator be an exposition-only type:struct input-iterator { using iterator_category = input_iterator_tag;using value_type = range_value_t<R>;using difference_type = ptrdiff_t;using pointer = add_pointer_t<range_reference_t<R>>;using reference = range_reference_t<R>; reference operator*() const; pointer operator->() const;input-iterator& operator++();input-iterator operator++(int);bool operator==(const input-iterator&) const;};

[Note 1:

input-iterator meets the syntactic requirements of Cpp17InputIterator.

— _end note_]

Let DEDUCE_EXPR be defined as follows:

Returns: to<decltype(_DEDUCE_EXPR_)>(std​::​forward<R>(r), std​::​forward<Args>(args)...).