Init
This commit is contained in:
31
cppdraft/refwrap/access.md
Normal file
31
cppdraft/refwrap/access.md
Normal file
@@ -0,0 +1,31 @@
|
||||
[refwrap.access]
|
||||
|
||||
# 22 General utilities library [[utilities]](./#utilities)
|
||||
|
||||
## 22.10 Function objects [[function.objects]](function.objects#refwrap.access)
|
||||
|
||||
### 22.10.6 Class template reference_wrapper [[refwrap]](refwrap#access)
|
||||
|
||||
#### 22.10.6.4 Access [refwrap.access]
|
||||
|
||||
[ð](#lib:operator_T&,reference_wrapper)
|
||||
|
||||
`constexpr operator T& () const noexcept;
|
||||
`
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11782)
|
||||
|
||||
*Returns*: The stored reference[.](#1.sentence-1)
|
||||
|
||||
[ð](#lib:get,reference_wrapper)
|
||||
|
||||
`constexpr T& get() const noexcept;
|
||||
`
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11793)
|
||||
|
||||
*Returns*: The stored reference[.](#2.sentence-1)
|
||||
20
cppdraft/refwrap/assign.md
Normal file
20
cppdraft/refwrap/assign.md
Normal file
@@ -0,0 +1,20 @@
|
||||
[refwrap.assign]
|
||||
|
||||
# 22 General utilities library [[utilities]](./#utilities)
|
||||
|
||||
## 22.10 Function objects [[function.objects]](function.objects#refwrap.assign)
|
||||
|
||||
### 22.10.6 Class template reference_wrapper [[refwrap]](refwrap#assign)
|
||||
|
||||
#### 22.10.6.3 Assignment [refwrap.assign]
|
||||
|
||||
[ð](#lib:operator=,reference_wrapper)
|
||||
|
||||
`constexpr reference_wrapper& operator=(const reference_wrapper& x) noexcept;
|
||||
`
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11769)
|
||||
|
||||
*Postconditions*: *this stores a reference to x.get()[.](#1.sentence-1)
|
||||
13
cppdraft/refwrap/common/ref.md
Normal file
13
cppdraft/refwrap/common/ref.md
Normal file
@@ -0,0 +1,13 @@
|
||||
[refwrap.common.ref]
|
||||
|
||||
# 22 General utilities library [[utilities]](./#utilities)
|
||||
|
||||
## 22.10 Function objects [[function.objects]](function.objects#refwrap.common.ref)
|
||||
|
||||
### 22.10.6 Class template reference_wrapper [[refwrap]](refwrap#common.ref)
|
||||
|
||||
#### 22.10.6.8 common_reference related specializations [refwrap.common.ref]
|
||||
|
||||
[ð](#lib:basic_common_reference)
|
||||
|
||||
namespace std {template<class T>constexpr bool *is-ref-wrapper* = false; // *exposition only*template<class T>constexpr bool *is-ref-wrapper*<reference_wrapper<T>> = true; template<class R, class T, class RQ, class TQ>concept [*ref-wrap-common-reference-exists-with*](#concept:ref-wrap-common-reference-exists-with "22.10.6.8 common_reference related specializations [refwrap.common.ref]") = // *exposition only**is-ref-wrapper*<R> &&requires { typename common_reference_t<typename R::type&, TQ>; } &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_to [concept.convertible]")<RQ, common_reference_t<typename R::type&, TQ>>; template<class R, class T, template<class> class RQual, template<class> class TQual>requires ([*ref-wrap-common-reference-exists-with*](#concept:ref-wrap-common-reference-exists-with "22.10.6.8 common_reference related specializations [refwrap.common.ref]")<R, T, RQual<R>, TQual<T>> &&<T, R, TQual<T>, RQual<R>>)struct basic_common_reference<R, T, RQual, TQual> {using type = common_reference_t<typename R::type&, TQual<T>>; }; template<class T, class R, template<class> class TQual, template<class> class RQual>requires ([*ref-wrap-common-reference-exists-with*](#concept:ref-wrap-common-reference-exists-with "22.10.6.8 common_reference related specializations [refwrap.common.ref]")<R, T, RQual<R>, TQual<T>> &&<T, R, TQual<T>, RQual<R>>)struct basic_common_reference<T, R, TQual, RQual> {using type = common_reference_t<typename R::type&, TQual<T>>; };}
|
||||
117
cppdraft/refwrap/comparisons.md
Normal file
117
cppdraft/refwrap/comparisons.md
Normal file
@@ -0,0 +1,117 @@
|
||||
[refwrap.comparisons]
|
||||
|
||||
# 22 General utilities library [[utilities]](./#utilities)
|
||||
|
||||
## 22.10 Function objects [[function.objects]](function.objects#refwrap.comparisons)
|
||||
|
||||
### 22.10.6 Class template reference_wrapper [[refwrap]](refwrap#comparisons)
|
||||
|
||||
#### 22.10.6.6 Comparisons [refwrap.comparisons]
|
||||
|
||||
[ð](#itemdecl:1)
|
||||
|
||||
`friend constexpr bool operator==(reference_wrapper x, reference_wrapper y);
|
||||
`
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11824)
|
||||
|
||||
*Constraints*: The expression x.get() == y.get() is well-formed and
|
||||
its result is convertible to bool[.](#1.sentence-1)
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11829)
|
||||
|
||||
*Returns*: x.get() == y.get()[.](#2.sentence-1)
|
||||
|
||||
[ð](#itemdecl:2)
|
||||
|
||||
`friend constexpr bool operator==(reference_wrapper x, const T& y);
|
||||
`
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11839)
|
||||
|
||||
*Constraints*: The expression x.get() == y is well-formed and
|
||||
its result is convertible to bool[.](#3.sentence-1)
|
||||
|
||||
[4](#4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11844)
|
||||
|
||||
*Returns*: x.get() == y[.](#4.sentence-1)
|
||||
|
||||
[ð](#itemdecl:3)
|
||||
|
||||
`friend constexpr bool operator==(reference_wrapper x, reference_wrapper<const T> y);
|
||||
`
|
||||
|
||||
[5](#5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11854)
|
||||
|
||||
*Constraints*: is_const_v<T> is false and
|
||||
the expression x.get() == y.get() is well-formed and
|
||||
its result is convertible to bool[.](#5.sentence-1)
|
||||
|
||||
[6](#6)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11860)
|
||||
|
||||
*Returns*: x.get() == y.get()[.](#6.sentence-1)
|
||||
|
||||
[ð](#itemdecl:4)
|
||||
|
||||
`friend constexpr auto operator<=>(reference_wrapper x, reference_wrapper y);
|
||||
`
|
||||
|
||||
[7](#7)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11870)
|
||||
|
||||
*Constraints*: The expression *synth-three-way*(x.get(), y.get()) is well-formed[.](#7.sentence-1)
|
||||
|
||||
[8](#8)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11875)
|
||||
|
||||
*Returns*: *synth-three-way*(x.get(), y.get())[.](#8.sentence-1)
|
||||
|
||||
[ð](#itemdecl:5)
|
||||
|
||||
`friend constexpr auto operator<=>(reference_wrapper x, const T& y);
|
||||
`
|
||||
|
||||
[9](#9)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11885)
|
||||
|
||||
*Constraints*: The expression *synth-three-way*(x.get(), y) is well-formed[.](#9.sentence-1)
|
||||
|
||||
[10](#10)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11890)
|
||||
|
||||
*Returns*: *synth-three-way*(x.get(), y)[.](#10.sentence-1)
|
||||
|
||||
[ð](#itemdecl:6)
|
||||
|
||||
`friend constexpr auto operator<=>(reference_wrapper x, reference_wrapper<const T> y);
|
||||
`
|
||||
|
||||
[11](#11)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11900)
|
||||
|
||||
*Constraints*: is_const_v<T> is false[.](#11.sentence-1)
|
||||
|
||||
The expression *synth-three-way*(x.get(), y.get()) is well-formed[.](#11.sentence-2)
|
||||
|
||||
[12](#12)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11906)
|
||||
|
||||
*Returns*: *synth-three-way*(x.get(), y.get())[.](#12.sentence-1)
|
||||
53
cppdraft/refwrap/const.md
Normal file
53
cppdraft/refwrap/const.md
Normal file
@@ -0,0 +1,53 @@
|
||||
[refwrap.const]
|
||||
|
||||
# 22 General utilities library [[utilities]](./#utilities)
|
||||
|
||||
## 22.10 Function objects [[function.objects]](function.objects#refwrap.const)
|
||||
|
||||
### 22.10.6 Class template reference_wrapper [[refwrap]](refwrap#const)
|
||||
|
||||
#### 22.10.6.2 Constructors [refwrap.const]
|
||||
|
||||
[ð](#lib:reference_wrapper,constructor)
|
||||
|
||||
`template<class U>
|
||||
constexpr reference_wrapper(U&& u) noexcept(see below);
|
||||
`
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11724)
|
||||
|
||||
Let *FUN* denote the exposition-only functionsvoid *FUN*(T&) noexcept;void *FUN*(T&&) = delete;
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11731)
|
||||
|
||||
*Constraints*: The expression *FUN*(declval<U>()) is well-formed andis_same_v<remove_cvref_t<U>, reference_wrapper> is false[.](#2.sentence-1)
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11736)
|
||||
|
||||
*Effects*: Creates a variable r as if by T& r = std::forward<U>(u),
|
||||
then constructs a reference_wrapper object
|
||||
that stores a reference to r[.](#3.sentence-1)
|
||||
|
||||
[4](#4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11743)
|
||||
|
||||
*Remarks*: The exception specification is equivalent tonoexcept(*FUN*(declval<U>()))[.](#4.sentence-1)
|
||||
|
||||
[ð](#lib:reference_wrapper,constructor_)
|
||||
|
||||
`constexpr reference_wrapper(const reference_wrapper& x) noexcept;
|
||||
`
|
||||
|
||||
[5](#5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11755)
|
||||
|
||||
*Effects*: Constructs a reference_wrapper object that
|
||||
stores a reference to x.get()[.](#5.sentence-1)
|
||||
41
cppdraft/refwrap/general.md
Normal file
41
cppdraft/refwrap/general.md
Normal file
@@ -0,0 +1,41 @@
|
||||
[refwrap.general]
|
||||
|
||||
# 22 General utilities library [[utilities]](./#utilities)
|
||||
|
||||
## 22.10 Function objects [[function.objects]](function.objects#refwrap.general)
|
||||
|
||||
### 22.10.6 Class template reference_wrapper [[refwrap]](refwrap#general)
|
||||
|
||||
#### 22.10.6.1 General [refwrap.general]
|
||||
|
||||
[ð](#lib:reference_wrapper)
|
||||
|
||||
namespace std {template<class T> class reference_wrapper {public:// typesusing type = T; // [[refwrap.const]](refwrap.const "22.10.6.2 Constructors"), constructorstemplate<class U>constexpr reference_wrapper(U&&) noexcept(*see below*); constexpr reference_wrapper(const reference_wrapper& x) noexcept; // [[refwrap.assign]](refwrap.assign "22.10.6.3 Assignment"), assignmentconstexpr reference_wrapper& operator=(const reference_wrapper& x) noexcept; // [[refwrap.access]](refwrap.access "22.10.6.4 Access"), accessconstexpr operator T& () const noexcept; constexpr T& get() const noexcept; // [[refwrap.invoke]](refwrap.invoke "22.10.6.5 Invocation"), invocationtemplate<class... ArgTypes>constexpr invoke_result_t<T&, ArgTypes...> operator()(ArgTypes&&...) constnoexcept(is_nothrow_invocable_v<T&, ArgTypes...>); // [[refwrap.comparisons]](refwrap.comparisons "22.10.6.6 Comparisons"), comparisonsfriend constexpr bool operator==(reference_wrapper, reference_wrapper); friend constexpr bool operator==(reference_wrapper, const T&); friend constexpr bool operator==(reference_wrapper, reference_wrapper<const T>); friend constexpr auto operator<=>(reference_wrapper, reference_wrapper); friend constexpr auto operator<=>(reference_wrapper, const T&); friend constexpr auto operator<=>(reference_wrapper, reference_wrapper<const T>); }; template<class T> reference_wrapper(T&) -> reference_wrapper<T>;}
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11697)
|
||||
|
||||
reference_wrapper<T> is a [*Cpp17CopyConstructible*](utility.arg.requirements#:Cpp17CopyConstructible "16.4.4.2 Template argument requirements [utility.arg.requirements]") and [*Cpp17CopyAssignable*](utility.arg.requirements#:Cpp17CopyAssignable "16.4.4.2 Template argument requirements [utility.arg.requirements]") wrapper
|
||||
around a reference to an object or function of type T[.](#1.sentence-1)
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11701)
|
||||
|
||||
reference_wrapper<T> is
|
||||
a trivially copyable type ([[basic.types.general]](basic.types.general#term.trivially.copyable.type "6.9.1 General"))[.](#2.sentence-1)
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11705)
|
||||
|
||||
The template parameter T of reference_wrapper may be an incomplete type[.](#3.sentence-1)
|
||||
|
||||
[*Note [1](#note-1)*:
|
||||
|
||||
Using the comparison operators described in [[refwrap.comparisons]](refwrap.comparisons "22.10.6.6 Comparisons") with T being an incomplete type
|
||||
can lead to an ill-formed program
|
||||
with no diagnostic required ([[temp.point]](temp.point "13.8.4.1 Point of instantiation"), [[temp.constr.atomic]](temp.constr.atomic "13.5.2.3 Atomic constraints"))[.](#3.sentence-2)
|
||||
|
||||
â *end note*]
|
||||
61
cppdraft/refwrap/helpers.md
Normal file
61
cppdraft/refwrap/helpers.md
Normal file
@@ -0,0 +1,61 @@
|
||||
[refwrap.helpers]
|
||||
|
||||
# 22 General utilities library [[utilities]](./#utilities)
|
||||
|
||||
## 22.10 Function objects [[function.objects]](function.objects#refwrap.helpers)
|
||||
|
||||
### 22.10.6 Class template reference_wrapper [[refwrap]](refwrap#helpers)
|
||||
|
||||
#### 22.10.6.7 Helper functions [refwrap.helpers]
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11913)
|
||||
|
||||
The template parameter T of
|
||||
the following ref and cref function templates
|
||||
may be an incomplete type[.](#1.sentence-1)
|
||||
|
||||
[ð](#lib:ref,reference_wrapper)
|
||||
|
||||
`template<class T> constexpr reference_wrapper<T> ref(T& t) noexcept;
|
||||
`
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11924)
|
||||
|
||||
*Returns*: reference_wrapper<T>(t)[.](#2.sentence-1)
|
||||
|
||||
[ð](#lib:ref,reference_wrapper_)
|
||||
|
||||
`template<class T> constexpr reference_wrapper<T> ref(reference_wrapper<T> t) noexcept;
|
||||
`
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11935)
|
||||
|
||||
*Returns*: t[.](#3.sentence-1)
|
||||
|
||||
[ð](#lib:cref,reference_wrapper)
|
||||
|
||||
`template<class T> constexpr reference_wrapper<const T> cref(const T& t) noexcept;
|
||||
`
|
||||
|
||||
[4](#4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11946)
|
||||
|
||||
*Returns*: reference_wrapper<const T>(t)[.](#4.sentence-1)
|
||||
|
||||
[ð](#lib:cref,reference_wrapper_)
|
||||
|
||||
`template<class T> constexpr reference_wrapper<const T> cref(reference_wrapper<T> t) noexcept;
|
||||
`
|
||||
|
||||
[5](#5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11957)
|
||||
|
||||
*Returns*: t[.](#5.sentence-1)
|
||||
28
cppdraft/refwrap/invoke.md
Normal file
28
cppdraft/refwrap/invoke.md
Normal file
@@ -0,0 +1,28 @@
|
||||
[refwrap.invoke]
|
||||
|
||||
# 22 General utilities library [[utilities]](./#utilities)
|
||||
|
||||
## 22.10 Function objects [[function.objects]](function.objects#refwrap.invoke)
|
||||
|
||||
### 22.10.6 Class template reference_wrapper [[refwrap]](refwrap#invoke)
|
||||
|
||||
#### 22.10.6.5 Invocation [refwrap.invoke]
|
||||
|
||||
[ð](#lib:operator(),reference_wrapper)
|
||||
|
||||
`template<class... ArgTypes>
|
||||
constexpr invoke_result_t<T&, ArgTypes...>
|
||||
operator()(ArgTypes&&... args) const noexcept(is_nothrow_invocable_v<T&, ArgTypes...>);
|
||||
`
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11808)
|
||||
|
||||
*Mandates*: T is a complete type[.](#1.sentence-1)
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L11812)
|
||||
|
||||
*Returns*: *INVOKE*(get(), std::forward<ArgTypes>(args)...) ([[func.require]](func.require "22.10.4 Requirements"))[.](#2.sentence-1)
|
||||
Reference in New Issue
Block a user