Skip to content

Commit 880d56d

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent f1e012d commit 880d56d

6 files changed

Lines changed: 15529 additions & 15512 deletions

File tree

lang/cpp23/auto_cast.html

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@
189189
<p class="text-right"><small>
190190
最終更新日時:
191191
<time itemprop="datePublished" class="js-local-time"
192-
datetime="2026-09-03T10:56:54+09:00">
193-
2026年09月03日 10時56分54秒 (JST)
192+
datetime="2026-09-03T11:09:53+09:00">
193+
2026年09月03日 11時09分53秒 (JST)
194194
</time>
195195
<br/>
196196
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -247,8 +247,8 @@ <h2>概要</h2>
247247
<p>C++23では、<code>auto(expr)</code>および<code>auto{expr}</code>によって、式<code>expr</code>の値をコピーした一時オブジェクトを取得できる。</p>
248248
<p><div class="codehilite"><pre><span></span><code><span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">(</span><span class="n"><a href="../../reference/vector/vector.html">std::vector</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">v</span><span class="p">)</span>
249249
<span class="p">{</span>
250-
<span class="w"> </span><span class="c1">// v.front()のコピーを、一時オブジェクトとしてg()に渡す</span>
251-
<span class="w"> </span><span class="n">g</span><span class="p">(</span><span class="k">auto</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">front</span><span class="p">()));</span>
250+
<span class="w"> </span><span class="c1">// <a href="../../reference/vector/vector/front.html">v.front</a>()のコピーを、一時オブジェクトとしてg()に渡す</span>
251+
<span class="w"> </span><span class="n">g</span><span class="p">(</span><span class="k">auto</span><span class="p">(</span><span class="n"><a href="../../reference/vector/vector/front.html">v.front</a></span><span class="p">()));</span>
252252
<span class="p">}</span>
253253
</code></pre></div>
254254
</p>
@@ -317,11 +317,11 @@ <h3>比較対象をコピーして渡す</h3>
317317
<span class="p">{</span>
318318
<span class="w"> </span><span class="n"><a href="../../reference/vector/vector.html">std::vector</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">};</span>
319319

320-
<span class="w"> </span><span class="c1">// std::remove()は、残す要素を前方に詰めるために要素を上書きしていく。</span>
321-
<span class="w"> </span><span class="c1">// 比較対象としてv.front()を渡すと、パラメータが参照であるために先頭要素の</span>
320+
<span class="w"> </span><span class="c1">// <a href="../../reference/algorithm/remove.html">std::remove</a>()は、残す要素を前方に詰めるために要素を上書きしていく。</span>
321+
<span class="w"> </span><span class="c1">// 比較対象として<a href="../../reference/vector/vector/front.html">v.front</a>()を渡すと、パラメータが参照であるために先頭要素の</span>
322322
<span class="w"> </span><span class="c1">// 上書きが比較対象の値にも波及し、意図しない結果になる。</span>
323323
<span class="w"> </span><span class="c1">// auto()でコピーを渡すことで、比較対象の値を固定できる</span>
324-
<span class="w"> </span><span class="n">v</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">remove</span><span class="p">(</span><span class="n"><a href="../../reference/vector/vector/begin.html">v.begin()</a></span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../../reference/vector/vector/end.html">v.end()</a></span><span class="p">,</span><span class="w"> </span><span class="k">auto</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">front</span><span class="p">())),</span><span class="w"> </span><span class="n"><a href="../../reference/vector/vector/end.html">v.end()</a></span><span class="p">);</span>
324+
<span class="w"> </span><span class="n"><a href="../../reference/vector/vector/erase.html">v.erase</a></span><span class="p">(</span><span class="n"><a href="../../reference/algorithm/remove.html">std::remove</a></span><span class="p">(</span><span class="n"><a href="../../reference/vector/vector/begin.html">v.begin()</a></span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../../reference/vector/vector/end.html">v.end()</a></span><span class="p">,</span><span class="w"> </span><span class="k">auto</span><span class="p">(</span><span class="n"><a href="../../reference/vector/vector/front.html">v.front</a></span><span class="p">())),</span><span class="w"> </span><span class="n"><a href="../../reference/vector/vector/end.html">v.end()</a></span><span class="p">);</span>
325325

326326
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">v</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
327327
<span class="w"> </span><span class="n"><a href="../../reference/iostream/cout.html">std::cout</a></span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">x</span><span class="p">;</span>
@@ -337,7 +337,7 @@ <h2>この機能が必要になった背景・経緯</h2>
337337
<p>標準ライブラリの規定では、コピーを作ることを表すために説明専用の<code><a href="../../reference/exposition-only/decay-copy.html">decay-copy</a></code>関数が使われていた。しかし、これと同じことをユーザーコードで書こうとすると、テンプレート・完全転送・<code>noexcept</code>指定・型特性を組み合わせた以下のような定義が必要になる。</p>
338338
<p><div class="codehilite"><pre><span></span><code><span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">class</span><span class="w"> </span><span class="nc">T</span><span class="o">&gt;</span>
339339
<span class="k">constexpr</span><span class="w"> </span><span class="n"><a href="../../reference/type_traits/decay.html">std::decay_t</a></span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">decay_copy</span><span class="p">(</span><span class="n">T</span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">v</span><span class="p">)</span>
340-
<span class="w"> </span><span class="k">noexcept</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">is_nothrow_convertible_v</span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../../reference/type_traits/decay.html">std::decay_t</a></span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;</span><span class="p">)</span>
340+
<span class="w"> </span><span class="k">noexcept</span><span class="p">(</span><span class="n"><a href="../../reference/type_traits/is_nothrow_convertible.html">std::is_nothrow_convertible_v</a></span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../../reference/type_traits/decay.html">std::decay_t</a></span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;</span><span class="p">)</span>
341341
<span class="p">{</span>
342342
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n"><a href="../../reference/utility/forward.html">std::forward</a></span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
343343
<span class="p">}</span>

reference/chrono/make24.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ <h2>例</h2>
263263
<span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">12h</a></span><span class="p">,</span><span class="w"> </span><span class="nb">false</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n"><a href="duration/op_h.html">0h</a></span><span class="p">);</span>
264264

265265
<span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">12h</a></span><span class="p">,</span><span class="w"> </span><span class="nb">true</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n"><a href="duration/op_h.html">12h</a></span><span class="p">);</span>
266-
<span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">1h</a></span><span class="p">,</span><span class="w"> </span><span class="nb">true</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1U</span><span class="n">YqyDgRIEyCshjbvfowrckffowZkZEgM</span><span class="p">);</span>
266+
<span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">1h</a></span><span class="p">,</span><span class="w"> </span><span class="nb">true</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">1</span><span class="n"><a href="duration/op_h.html">3h</a></span><span class="p">);</span>
267267
<span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">3h</a></span><span class="p">,</span><span class="w"> </span><span class="nb">true</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n"><a href="duration/op_h.html">15h</a></span><span class="p">);</span>
268268
<span class="w"> </span><span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">11h</a></span><span class="p">,</span><span class="w"> </span><span class="nb">true</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n"><a href="duration/op_h.html">23h</a></span><span class="p">);</span>
269269
<span class="p">}</span>

rss.xml

Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,54 @@
22
<feed xmlns="http://www.w3.org/2005/Atom">
33
<title>cpprefjp - C++日本語リファレンス</title>
44
<link href="https://cpprefjp.github.io" />
5-
<updated>2026-09-03T01:59:01.455789</updated>
6-
<id>bfeebc4f-d116-4757-8dc9-4d64c032090d</id>
5+
<updated>2026-09-03T02:11:58.587516</updated>
6+
<id>9c2c5121-dfb3-4641-9439-146561c80bfd</id>
77

88

9+
<entry>
10+
<title>auto(x)による一時オブジェクトへの変換 [P0849R8] -- C++23 auto_cast : コード修飾を追加</title>
11+
<link href="https://cpprefjp.github.io/lang/cpp23/auto_cast.html"/>
12+
<id>da36b281e6f4331201f20b5d7999b293e04db5a5:lang/cpp23/auto_cast.md</id>
13+
<updated>2026-09-03T11:09:53+09:00</updated>
14+
15+
<summary type="html">&lt;pre&gt;&lt;code&gt;diff --git a/lang/cpp23/auto_cast.md b/lang/cpp23/auto_cast.md
16+
index dcb88bbe8..a4a97c5ed 100644
17+
--- a/lang/cpp23/auto_cast.md
18+
+++ b/lang/cpp23/auto_cast.md
19+
@@ -19,6 +19,7 @@ void f(std::vector&amp;lt;int&amp;gt;&amp;amp; v)
20+
g(auto(v.front()));
21+
}
22+
```
23+
+* v.front[link /reference/vector/vector/front.md]
24+
25+
コピーを作るだけであれば`auto a = v.front();`のように変数宣言でもよいが、この場合はコピーであることが宣言の副次的な性質にすぎず、得られる`a`も左辺値である。`auto(...)`は「値をコピーする」という操作を式として直接表現でき、その結果は関数へ値渡しした場合と同じprvalue (一時オブジェクト) となる。
26+
27+
@@ -110,6 +111,9 @@ int main()
28+
std::cout &amp;lt;&amp;lt; std::endl;
29+
}
30+
```
31+
+* v.front[link /reference/vector/vector/front.md]
32+
+* std::remove[link /reference/algorithm/remove.md]
33+
+* v.erase[link /reference/vector/vector/erase.md]
34+
35+
### 出力
36+
```
37+
@@ -128,6 +132,7 @@ constexpr std::decay_t&amp;lt;T&amp;gt; decay_copy(T&amp;amp;&amp;amp; v)
38+
return std::forward&amp;lt;T&amp;gt;(v);
39+
}
40+
```
41+
+* std::is_nothrow_convertible_v[link /reference/type_traits/is_nothrow_convertible.md]
42+
43+
この方法には、以下の問題もあった。
44+
45+
&lt;/code&gt;&lt;/pre&gt;</summary>
46+
47+
<author>
48+
<name>Akira Takahashi</name>
49+
<email>faithandbrave@gmail.com</email>
50+
</author>
51+
</entry>
52+
953
<entry>
1054
<title>コンパイラの実装状況 -- C++23 : 「auto(x)による一時オブジェクトへの変換」を追加 (close #1254)</title>
1155
<link href="https://cpprefjp.github.io/implementation-status.html"/>
@@ -7979,33 +8023,6 @@ index b08b6ab01..2ed84d6e6 100644
79798023
+ - `value`の定義が変更されたことにともない、変換先の型が、包んでいる値がスカラー型である場合に参照ではなく値となった。仕様としてはC++29に導入されるが、C++26に対する欠陥報告 (DR) である
79808024
- [LWG Issue 4468. `operator decltype(auto)` is ill-formed](https://cplusplus.github.io/LWG/issue4468)
79818025
- この変換演算子はP2781R9では`operator decltype(auto)()`と宣言されていたが、CWG 1670により変換関数の型指定子として`decltype(auto)`を書くことは不適格であるため、`operator decltype(value)()`へ修正された(変換先の型は変わらない構文上の修正)
7982-
&lt;/code&gt;&lt;/pre&gt;</summary>
7983-
7984-
<author>
7985-
<name>Akira Takahashi</name>
7986-
<email>faithandbrave@gmail.com</email>
7987-
</author>
7988-
</entry>
7989-
7990-
<entry>
7991-
<title>type_order -- type_order : Clang 24 (trunk) で実装された</title>
7992-
<link href="https://cpprefjp.github.io/reference/compare/type_order.html"/>
7993-
<id>ae451fc93a7741a29c7ff10586f8513f6f03c9ec:reference/compare/type_order.md</id>
7994-
<updated>2026-09-02T09:45:57+09:00</updated>
7995-
7996-
<summary type="html">&lt;pre&gt;&lt;code&gt;diff --git a/reference/compare/type_order.md b/reference/compare/type_order.md
7997-
index 35643a8ff..e89e7d819 100644
7998-
--- a/reference/compare/type_order.md
7999-
+++ b/reference/compare/type_order.md
8000-
@@ -80,7 +80,7 @@ int main() {
8001-
- C++26
8002-
8003-
### 処理系
8004-
-- [Clang](/implementation.md#clang): 22 [mark noimpl]
8005-
+- [Clang](/implementation.md#clang): 24 [mark verified]
8006-
- [GCC](/implementation.md#gcc): 16 [mark verified]
8007-
- [Visual C++](/implementation.md#visual_cpp): 2026 Update 2 [mark noimpl]
8008-
80098026
&lt;/code&gt;&lt;/pre&gt;</summary>
80108027

80118028
<author>

0 commit comments

Comments
 (0)