Skip to content

Commit 9801a46

Browse files
committed
Introduce [parallel.simd.reference]
1 parent 9e15031 commit 9801a46

File tree

1 file changed

+182
-0
lines changed

1 file changed

+182
-0
lines changed

data_parallel_types.html

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,188 @@ <h1><ins>Class template <code>simd</code> overview</ins></h1>
10251025
</ins>
10261026
</p>
10271027
</cxx-section>
1028+
1029+
<cxx-section id="parallel.simd.reference">
1030+
<h1><ins>Element references</ins></h1>
1031+
1032+
<p>
1033+
<ins>
1034+
A <code>reference</code> is an object that refers to an element in a <code>simd</code> or <code>simd_mask</code> object. <code>reference::value_type</code> is the same type as <code>simd::value_type</code> or <code>simd_mask::value_type</code>, respectively.
1035+
</ins>
1036+
</p>
1037+
1038+
<p>
1039+
<ins>
1040+
Class <code>reference</code> is for exposition only. An implementation is permitted to provide equivalent functionality without providing a class with this name.
1041+
</ins>
1042+
1043+
<pre>
1044+
<ins>
1045+
class reference // exposition only
1046+
{
1047+
public:
1048+
reference() = delete;
1049+
reference(const reference&) = delete;
1050+
1051+
operator value_type() const noexcept;
1052+
1053+
template&lt;class U&gt; reference operator=(U&& x) &&;
1054+
1055+
template&lt;class U&gt; reference operator+=(U&& x) &&;
1056+
template&lt;class U&gt; reference operator-=(U&& x) &&;
1057+
template&lt;class U&gt; reference operator*=(U&& x) &&;
1058+
template&lt;class U&gt; reference operator/=(U&& x) &&;
1059+
template&lt;class U&gt; reference operator%=(U&& x) &&;
1060+
template&lt;class U&gt; reference operator|=(U&& x) &&;
1061+
template&lt;class U&gt; reference operator&=(U&& x) &&;
1062+
template&lt;class U&gt; reference operator^=(U&& x) &&;
1063+
template&lt;class U&gt; reference operator&lt;&lt;=(U&& x) &&;
1064+
template&lt;class U&gt; reference operator&gt;&gt;=(U&& x) &&;
1065+
1066+
reference operator++() &&;
1067+
value_type operator++(int) &&;
1068+
reference operator--() &&;
1069+
value_type operator--(int) &&;
1070+
1071+
friend void swap(reference&& a, reference&& b) noexcept;
1072+
friend void swap(value_type&& a, reference&& b) noexcept;
1073+
friend void swap(reference&& a, value_type&& b) noexcept;
1074+
1075+
};</ins>
1076+
</pre>
1077+
</p>
1078+
1079+
<cxx-function>
1080+
<cxx-signature><ins>operator value_type() const noexcept;</ins></cxx-signature>
1081+
1082+
<cxx-returns>
1083+
<ins>
1084+
The value of the element referred to by <code>*this</code>.
1085+
</ins>
1086+
</cxx-returns>
1087+
</cxx-function>
1088+
1089+
<cxx-function>
1090+
<cxx-signature><ins>template&lt;class U&gt; reference operator=(U&& x) &&;</ins></cxx-signature>
1091+
1092+
<cxx-effects>
1093+
<ins>
1094+
Replaces the referred to element in <code>simd</code> or <code>simd_mask</code> with <code>static_cast&lt;value_type&gt;(std::forward&lt;U&gt;(x))</code>.
1095+
</ins>
1096+
</cxx-effects>
1097+
1098+
<cxx-returns>
1099+
<ins>
1100+
A copy of <code>*this</code>.
1101+
</ins>
1102+
</cxx-returns>
1103+
1104+
<cxx-remarks>
1105+
<ins>
1106+
This function shall not participate in overload resolution unless <code>declval&lt;value_type &&gt;() = std::forward&gt;U&gt;(x)</code> is well-formed.
1107+
</ins>
1108+
</cxx-remarks>
1109+
</cxx-function>
1110+
1111+
<cxx-function>
1112+
<cxx-signature><ins>
1113+
template&lt;class U&gt; reference operator+=(U&& x) &&;
1114+
template&lt;class U&gt; reference operator-=(U&& x) &&;
1115+
template&lt;class U&gt; reference operator*=(U&& x) &&;
1116+
template&lt;class U&gt; reference operator/=(U&& x) &&;
1117+
template&lt;class U&gt; reference operator%=(U&& x) &&;
1118+
template&lt;class U&gt; reference operator|=(U&& x) &&;
1119+
template&lt;class U&gt; reference operator&=(U&& x) &&;
1120+
template&lt;class U&gt; reference operator^=(U&& x) &&;
1121+
template&lt;class U&gt; reference operator&lt;&lt;=(U&& x) &&;
1122+
template&lt;class U&gt; reference operator&gt;&gt;=(U&& x) &&;</ins>
1123+
</cxx-signature>
1124+
1125+
<cxx-effects>
1126+
<ins>
1127+
Applies the indicated compound operator to the referred to element in <code>simd</code> or <code>simd_mask</code> and <code>std::forward&lt;U&gt;(x)</code>.
1128+
</ins>
1129+
</cxx-effects>
1130+
1131+
<cxx-returns>
1132+
<ins>
1133+
A copy of <code>*this</code>.
1134+
</ins>
1135+
</cxx-returns>
1136+
1137+
<cxx-remarks>
1138+
<ins>
1139+
This function shall not participate in overload resolution unless <code>declval&lt;value_type &&&gt;() @= std::forward&lt;U&gt;(x)</code> (where <code>@=</code> denotes the indicated compound assignment operator) is well-formed.
1140+
</ins>
1141+
</cxx-remarks>
1142+
</cxx-function>
1143+
1144+
<cxx-function>
1145+
<cxx-signature><ins>
1146+
reference operator++() &&;
1147+
reference operator--() &&;
1148+
</ins>
1149+
</cxx-signature>
1150+
1151+
<cxx-effects>
1152+
<ins>
1153+
Applies the indicated operator to the referred to element in <code>simd</code> or <code>simd_mask</code>.
1154+
</ins>
1155+
</cxx-effects>
1156+
1157+
<cxx-returns>
1158+
<ins>
1159+
A copy of <code>*this</code>.
1160+
</ins>
1161+
</cxx-returns>
1162+
1163+
<cxx-remarks>
1164+
<ins>
1165+
This function shall not participate in overload resolution unless the indicated operator can be applied to objects of type <code>value_type</code>.
1166+
</ins>
1167+
</cxx-remarks>
1168+
</cxx-function>
1169+
1170+
<cxx-function>
1171+
<cxx-signature><ins>
1172+
value_type operator++(int) &&;
1173+
value_type operator--(int) &&;
1174+
</ins>
1175+
</cxx-signature>
1176+
1177+
<cxx-effects>
1178+
<ins>
1179+
Applies the indicated operator to the referred to element in <code>simd</code> or <code>simd_mask</code>.
1180+
</ins>
1181+
</cxx-effects>
1182+
1183+
<cxx-returns>
1184+
<ins>
1185+
A copy of the referred to element before applying the indicated operator.
1186+
</ins>
1187+
</cxx-returns>
1188+
1189+
<cxx-remarks>
1190+
<ins>
1191+
This function shall not participate in overload resolution unless the indicated operator can be applied to objects of type <code>value_type</code>.
1192+
</ins>
1193+
</cxx-remarks>
1194+
</cxx-function>
1195+
1196+
<cxx-function>
1197+
<cxx-signature><ins>
1198+
friend void swap(reference&& a, reference&& b) noexcept;
1199+
friend void swap(value_type& a, reference&& b) noexcept;
1200+
friend void swap(reference&& a, value_type& b) noexcept;</ins>
1201+
</cxx-signature>
1202+
1203+
<cxx-effects>
1204+
<ins>
1205+
Exchanges the values <code>a</code> and <code>b</code> refer to.
1206+
</ins>
1207+
</cxx-effects>
1208+
</cxx-function>
1209+
</cxx-section>
10281210
</cxx-section>
10291211
</cxx-clause>
10301212

0 commit comments

Comments
 (0)