Skip to content

Commit 60dac25

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 4b52609 commit 60dac25

File tree

3 files changed

+71
-65
lines changed

3 files changed

+71
-65
lines changed

reference/mdspan/mdspan/op_deduction_guide.html

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868

6969
</head>
7070
<body>
71-
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;mdspan&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;class&#34;: [&#34;mdspan&#34;], &#34;cpp&#34;: [&#34;cpp23&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;b8e69a8545aab969812e17dc16eebb87db90ad26&#34;, &#34;source&#34;: &#34;#include &lt;cassert&gt;\n#include &lt;array&gt;\n#include &lt;span&gt;\n#include &lt;mdspan&gt;\n#include &lt;type_traits&gt;\n\ntemplate &lt;int N&gt;\nconstexpr auto Int = std::integral_constant&lt;int, N&gt;{};\n\nint main()\n{\n int arr[] = {1, 2, 3, 4, 5, 6};\n\n { // (1) :\u30001\u6b21\u5143\u914d\u5217\u578b\u304b\u3089\u578b\u63a8\u8ad6\n std::mdspan m1{arr};\n static_assert(m1.rank() == 1 &amp;&amp; m1.rank_dynamic() == 0);\n static_assert(m1.static_extent(0) == 6);\n // m1 := \u9759\u7684\u8981\u7d20\u6570 6 \u306e1\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n\n // 2\u6b21\u5143\u914d\u5217\u578b\u304b\u3089\u306f\u578b\u63a8\u8ad6\u3067\u304d\u306a\u3044\n // int arr2d[2][3] = {{1, 2, 3}, {4, 5, 6}};\n // std::mdspan m1_ng{arr2d};\n // \u4e0b\u8a18\u306f\u63a8\u8ad6\u88dc\u52a9(2)\u306b\u3088\u308a0\u6b21\u5143mdspan\u3068\u306a\u308b\n // std::mdspan m1_d0{&amp;arr2d[0][0]};\n }\n { // (2) : \u30dd\u30a4\u30f3\u30bf\u578b\u304b\u3089\u578b\u63a8\u8ad6\n int* ptr = arr;\n std::mdspan m2{ptr};\n static_assert(m2.rank() == 0);\n assert(m2[] == *ptr);\n // m2 := 0\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (3) : \u8981\u7d20\u6570\u30ea\u30b9\u30c8\u304b\u3089\u578b\u63a8\u8ad6\n std::mdspan m3a{arr, 2, 3};\n static_assert(m3a.rank_dynamic() == 2);\n assert(m3a.size() == 6);\n // m3a := \u52d5\u7684\u8981\u7d20\u6570 2x3 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n\n std::mdspan m3b{arr, Int&lt;2&gt;, Int&lt;3&gt;};\n static_assert(m3b.rank_dynamic() == 0);\n assert(m3b.size() == 6);\n // m3b := \u9759\u7684\u8981\u7d20\u6570 2x3 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (4) : \u8981\u7d20\u6570span\u304b\u3089\u578b\u63a8\u8ad6\n int exts[] = {2, 3};\n std::mdspan m4{arr, std::span{exts}};\n static_assert(m4.rank_dynamic() == 2);\n assert(m4.size() == 6);\n // m4 := \u52d5\u7684\u8981\u7d20\u6570 2x3 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (5) : \u8981\u7d20\u6570array\u304b\u3089\u578b\u63a8\u8ad6\n std::array exts{2, 3};\n std::mdspan m5{arr, exts};\n static_assert(m5.rank_dynamic() == 2);\n assert(m5.size() == 6);\n // m5 := \u52d5\u7684\u8981\u7d20\u6570 2x3 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (6) : \u591a\u6b21\u5143\u914d\u5217\u30b5\u30a4\u30ba\u304b\u3089\u578b\u63a8\u8ad6\n std::extents&lt;size_t, 2, std::dynamic_extent&gt; ext{3};\n std::mdspan m6{arr, ext};\n static_assert(m6.rank() == 2 &amp;&amp; m6.rank_dynamic() == 1);\n assert(m6.size() == 6);\n // m6 := \u9759\u7684\u8981\u7d20\u65702 x \u52d5\u7684\u8981\u7d20\u65703 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (7) : \u30ec\u30a4\u30a2\u30a6\u30c8\u30de\u30c3\u30d4\u30f3\u30b0\u304b\u3089\u578b\u63a8\u8ad6\n using Ext2D = std::dextents&lt;size_t, 2&gt;;\n std::layout_stride::mapping&lt;Ext2D&gt; map{Ext2D{2, 2}, std::array{3, 1}};\n std::mdspan m7{arr, map};\n static_assert(m7.rank_dynamic() == 2);\n assert(m7.size() == 4);\n // m7 := \u52d5\u7684\u8981\u7d20\u6570 2x2\uff08\u30b9\u30c8\u30e9\u30a4\u30c9\u5e45=[3,1]\uff09 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (8) : \u30ec\u30a4\u30a2\u30a6\u30c8\u30de\u30c3\u30d4\u30f3\u30b0\uff0b\u8981\u7d20\u30a2\u30af\u30bb\u30b5\u304b\u3089\u578b\u63a8\u8ad6\n using Ext2D = std::dextents&lt;size_t, 2&gt;;\n std::layout_stride::mapping&lt;Ext2D&gt; map{Ext2D{2, 2}, std::array{3, 1}};\n std::default_accessor&lt;const int&gt; acc;\n std::mdspan m8{arr, map, acc};\n static_assert(m8.rank_dynamic() == 2);\n assert(m8.size() == 4);\n // m8 := \u52d5\u7684\u8981\u7d20\u6570 2x2\uff08\u30b9\u30c8\u30e9\u30a4\u30c9\u5e45=[3,1]\uff09 \u306e\u8aad\u307f\u53d6\u308a\u5c02\u75282\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;mdspan&#34;, &#34;mdspan&#34;, &#34;op_deduction_guide&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;mdspan&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;class&#34;: [&#34;mdspan&#34;], &#34;cpp&#34;: [&#34;cpp23&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;76b3229abd913178ccd06507e0bcba690ee0f46c&#34;, &#34;source&#34;: &#34;#include &lt;cassert&gt;\n#include &lt;array&gt;\n#include &lt;span&gt;\n#include &lt;mdspan&gt;\n#include &lt;type_traits&gt;\n\ntemplate &lt;int N&gt;\nconstexpr auto Int = std::integral_constant&lt;int, N&gt;{};\n\nint main()\n{\n int arr[] = {1, 2, 3, 4, 5, 6};\n\n { // (1) :\u30001\u6b21\u5143\u914d\u5217\u578b\u304b\u3089\u578b\u63a8\u8ad6\n std::mdspan m1{arr};\n static_assert(m1.rank() == 1 &amp;&amp; m1.rank_dynamic() == 0);\n static_assert(m1.static_extent(0) == 6);\n // m1 := \u9759\u7684\u8981\u7d20\u6570 6 \u306e1\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n\n // 2\u6b21\u5143\u914d\u5217\u578b\u304b\u3089\u306f\u578b\u63a8\u8ad6\u3067\u304d\u306a\u3044\n // int arr2d[2][3] = {{1, 2, 3}, {4, 5, 6}};\n // std::mdspan m1_ng{arr2d};\n // \u4e0b\u8a18\u306f\u63a8\u8ad6\u88dc\u52a9(2)\u306b\u3088\u308a0\u6b21\u5143mdspan\u3068\u306a\u308b\n // std::mdspan m1_d0{&amp;arr2d[0][0]};\n }\n { // (2) : \u30dd\u30a4\u30f3\u30bf\u578b\u304b\u3089\u578b\u63a8\u8ad6\n int* ptr = arr;\n std::mdspan m2{ptr};\n static_assert(m2.rank() == 0);\n assert(m2[] == *ptr);\n // m2 := 0\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (3) : C++23 \u8981\u7d20\u6570\u30ea\u30b9\u30c8\u304b\u3089\u578b\u63a8\u8ad6\n std::mdspan m3a{arr, 2, 3};\n static_assert(m3a.rank_dynamic() == 2);\n assert(m3a.size() == 6);\n // m3a := \u52d5\u7684\u8981\u7d20\u6570 2x3 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (3) : C++26 \u6574\u6570\u5b9a\u6570\u8981\u7d20\u6570\u30ea\u30b9\u30c8\u304b\u3089\u578b\u63a8\u8ad6\n std::mdspan m3b{arr, Int&lt;2&gt;, Int&lt;3&gt;};\n static_assert(m3b.rank_dynamic() == 0);\n assert(m3b.size() == 6);\n // m3b := \u9759\u7684\u8981\u7d20\u6570 2x3 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (4) : \u8981\u7d20\u6570span\u304b\u3089\u578b\u63a8\u8ad6\n int exts[] = {2, 3};\n std::mdspan m4{arr, std::span{exts}};\n static_assert(m4.rank_dynamic() == 2);\n assert(m4.size() == 6);\n // m4 := \u52d5\u7684\u8981\u7d20\u6570 2x3 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (5) : \u8981\u7d20\u6570array\u304b\u3089\u578b\u63a8\u8ad6\n std::array exts{2, 3};\n std::mdspan m5{arr, exts};\n static_assert(m5.rank_dynamic() == 2);\n assert(m5.size() == 6);\n // m5 := \u52d5\u7684\u8981\u7d20\u6570 2x3 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (6) : \u591a\u6b21\u5143\u914d\u5217\u30b5\u30a4\u30ba\u304b\u3089\u578b\u63a8\u8ad6\n std::extents&lt;size_t, 2, std::dynamic_extent&gt; ext{3};\n std::mdspan m6{arr, ext};\n static_assert(m6.rank() == 2 &amp;&amp; m6.rank_dynamic() == 1);\n assert(m6.size() == 6);\n // m6 := \u9759\u7684\u8981\u7d20\u65702 x \u52d5\u7684\u8981\u7d20\u65703 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (7) : \u30ec\u30a4\u30a2\u30a6\u30c8\u30de\u30c3\u30d4\u30f3\u30b0\u304b\u3089\u578b\u63a8\u8ad6\n using Ext2D = std::dextents&lt;size_t, 2&gt;;\n std::layout_stride::mapping&lt;Ext2D&gt; map{Ext2D{2, 2}, std::array{3, 1}};\n std::mdspan m7{arr, map};\n static_assert(m7.rank_dynamic() == 2);\n assert(m7.size() == 4);\n // m7 := \u52d5\u7684\u8981\u7d20\u6570 2x2\uff08\u30b9\u30c8\u30e9\u30a4\u30c9\u5e45=[3,1]\uff09 \u306e2\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n { // (8) : \u30ec\u30a4\u30a2\u30a6\u30c8\u30de\u30c3\u30d4\u30f3\u30b0\uff0b\u8981\u7d20\u30a2\u30af\u30bb\u30b5\u304b\u3089\u578b\u63a8\u8ad6\n using Ext2D = std::dextents&lt;size_t, 2&gt;;\n std::layout_stride::mapping&lt;Ext2D&gt; map{Ext2D{2, 2}, std::array{3, 1}};\n std::default_accessor&lt;const int&gt; acc;\n std::mdspan m8{arr, map, acc};\n static_assert(m8.rank_dynamic() == 2);\n assert(m8.size() == 4);\n // m8 := \u52d5\u7684\u8981\u7d20\u6570 2x2\uff08\u30b9\u30c8\u30e9\u30a4\u30c9\u5e45=[3,1]\uff09 \u306e\u8aad\u307f\u53d6\u308a\u5c02\u75282\u6b21\u5143\u914d\u5217\u30d3\u30e5\u30fc\n }\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;mdspan&#34;, &#34;mdspan&#34;, &#34;op_deduction_guide&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -200,8 +200,8 @@
200200

201201
<p class="text-right"><small>
202202
最終更新日時(UTC):
203-
<span itemprop="datePublished" content="2024-06-25T08:35:29">
204-
2024年06月25日 08時35分29秒
203+
<span itemprop="datePublished" content="2024-06-25T08:44:14">
204+
2024年06月25日 08時44分14秒
205205
</span>
206206
<br/>
207207
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -239,7 +239,11 @@
239239
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">ElementType</span><span class="p">,</span> <span class="n">class</span><span class="p">...</span> <span class="n">Integrals</span><span class="o">&gt;</span>
240240
<span class="n">requires</span> <span class="p">((</span><span class="n"><a href="../../type_traits/is_convertible.html">is_convertible_v</a></span><span class="o">&lt;</span><span class="n">Integrals</span><span class="p">,</span> <span class="kt">size_t</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span> <span class="p">...)</span> <span class="o">&amp;&amp;</span> <span class="k">sizeof</span><span class="p">...(</span><span class="n">Integrals</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span>
241241
<span class="k">explicit</span> <span class="n">mdspan</span><span class="p">(</span><span class="n">ElementType</span><span class="o">*</span><span class="p">,</span> <span class="n">Integrals</span><span class="p">...)</span>
242-
<span class="o">-&gt;</span> <span class="n">mdspan</span><span class="o">&lt;</span><span class="n">ElementType</span><span class="p">,</span> <span class="n"><a href="../extents.html">extents</a></span><span class="o">&lt;</span><span class="kt">size_t</span><span class="p">,</span> <span class="n"><a href="../../span/maybe-static-ext.html">maybe-static-ext</a></span><span class="o">&lt;</span><span class="n">Integrals</span><span class="o">&gt;</span><span class="p">...</span><span class="o">&gt;&gt;</span><span class="p">;</span> <span class="c1">// (3)</span>
242+
<span class="o">-&gt;</span> <span class="n">mdspan</span><span class="o">&lt;</span><span class="n">ElementType</span><span class="p">,</span> <span class="n"><a href="../extents.html">dextents</a></span><span class="o">&lt;</span><span class="kt">size_t</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">...(</span><span class="n">Integrals</span><span class="p">)</span><span class="o">&gt;&gt;</span><span class="p">;</span> <span class="c1">// (3) C++23</span>
243+
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">ElementType</span><span class="p">,</span> <span class="n">class</span><span class="p">...</span> <span class="n">Integrals</span><span class="o">&gt;</span>
244+
<span class="n">requires</span> <span class="p">((</span><span class="n"><a href="../../type_traits/is_convertible.html">is_convertible_v</a></span><span class="o">&lt;</span><span class="n">Integrals</span><span class="p">,</span> <span class="kt">size_t</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span> <span class="p">...)</span> <span class="o">&amp;&amp;</span> <span class="k">sizeof</span><span class="p">...(</span><span class="n">Integrals</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span>
245+
<span class="k">explicit</span> <span class="n">mdspan</span><span class="p">(</span><span class="n">ElementType</span><span class="o">*</span><span class="p">,</span> <span class="n">Integrals</span><span class="p">...)</span>
246+
<span class="o">-&gt;</span> <span class="n">mdspan</span><span class="o">&lt;</span><span class="n">ElementType</span><span class="p">,</span> <span class="n"><a href="../extents.html">extents</a></span><span class="o">&lt;</span><span class="kt">size_t</span><span class="p">,</span> <span class="n"><a href="../../span/maybe-static-ext.html">maybe-static-ext</a></span><span class="o">&lt;</span><span class="n">Integrals</span><span class="o">&gt;</span><span class="p">...</span><span class="o">&gt;&gt;</span><span class="p">;</span> <span class="c1">// (3) C++26</span>
243247

244248
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">ElementType</span><span class="p">,</span> <span class="k">class</span> <span class="nc">OtherIndexType</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">N</span><span class="o">&gt;</span>
245249
<span class="n">mdspan</span><span class="p">(</span><span class="n">ElementType</span><span class="o">*</span><span class="p">,</span> <span class="n"><a href="../../span/span.html">span</a></span><span class="o">&lt;</span><span class="n">OtherIndexType</span><span class="p">,</span> <span class="n">N</span><span class="o">&gt;</span><span class="p">)</span>
@@ -275,7 +279,7 @@ <h2>概要</h2>
275279
<h2>備考</h2>
276280
<p>推論補助(2)により、コンパイル時に要素数を取得できないポインタ型引数からは0次元<code>mdspan</code>が推論される。</p>
277281
<h2></h2>
278-
<p><div class="yata" id="b8e69a8545aab969812e17dc16eebb87db90ad26"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../cassert.html">&lt;cassert&gt;</a></span><span class="cp"></span>
282+
<p><div class="yata" id="76b3229abd913178ccd06507e0bcba690ee0f46c"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../cassert.html">&lt;cassert&gt;</a></span><span class="cp"></span>
279283
<span class="cp">#include</span> <span class="cpf"><a href="../../array.html">&lt;array&gt;</a></span><span class="cp"></span>
280284
<span class="cp">#include</span> <span class="cpf"><a href="../../span.html">&lt;span&gt;</a></span><span class="cp"></span>
281285
<span class="cp">#include</span> <span class="cpf"><a href="../../mdspan.html">&lt;mdspan&gt;</a></span><span class="cp"></span>
@@ -307,12 +311,13 @@ <h2>例</h2>
307311
<span class="n"><a href="../../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n">m2</span><span class="p">[]</span> <span class="o">==</span> <span class="o">*</span><span class="n">ptr</span><span class="p">);</span>
308312
<span class="c1">// m2 := 0次元配列ビュー</span>
309313
<span class="p">}</span>
310-
<span class="p">{</span> <span class="c1">// (3) : 要素数リストから型推論</span>
314+
<span class="p">{</span> <span class="c1">// (3) : C++23 要素数リストから型推論</span>
311315
<span class="n"><span style="color:#ff0000">std::mdspan</span></span> <span class="n">m3a</span><span class="p">{</span><span class="n">arr</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">};</span>
312316
<span class="k">static_assert</span><span class="p">(</span><span class="n">m3a</span><span class="p">.</span><span class="n"><a href="rank_dynamic.html">rank_dynamic</a></span><span class="p">()</span> <span class="o">==</span> <span class="mi">2</span><span class="p">);</span>
313317
<span class="n"><a href="../../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n">m3a</span><span class="p">.</span><span class="n"><a href="size.html">size</a></span><span class="p">()</span> <span class="o">==</span> <span class="mi">6</span><span class="p">);</span>
314318
<span class="c1">// m3a := 動的要素数 2x3 の2次元配列ビュー</span>
315-
319+
<span class="p">}</span>
320+
<span class="p">{</span> <span class="c1">// (3) : C++26 整数定数要素数リストから型推論</span>
316321
<span class="n"><span style="color:#ff0000">std::mdspan</span></span> <span class="n">m3b</span><span class="p">{</span><span class="n">arr</span><span class="p">,</span> <span class="n">Int</span><span class="o">&lt;</span><span class="mi">2</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">Int</span><span class="o">&lt;</span><span class="mi">3</span><span class="o">&gt;</span><span class="p">};</span>
317322
<span class="k">static_assert</span><span class="p">(</span><span class="n">m3b</span><span class="p">.</span><span class="n"><a href="rank_dynamic.html">rank_dynamic</a></span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">);</span>
318323
<span class="n"><a href="../../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n">m3b</span><span class="p">.</span><span class="n"><a href="size.html">size</a></span><span class="p">()</span> <span class="o">==</span> <span class="mi">6</span><span class="p">);</span>
@@ -382,7 +387,10 @@ <h2>関連項目</h2>
382387
<h2>参照</h2>
383388
<ul>
384389
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html" target="_blank">P0009R18 MDSPAN</a></li>
385-
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3029r1.html" target="_blank">P3029R1 Better <code>mdspan</code>'s CTAD</a></li>
390+
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3029r1.html" target="_blank">P3029R1 Better <code>mdspan</code>'s CTAD</a><ul>
391+
<li>C++26から、(3)で静的要素数への推論がサポートされる。</li>
392+
</ul>
393+
</li>
386394
</ul></div>
387395

388396
</div>

0 commit comments

Comments
 (0)