Skip to content

Commit 516650c

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent fc3f4dd commit 516650c

File tree

4 files changed

+70
-142
lines changed

4 files changed

+70
-142
lines changed

reference/type_traits/reference_constructs_from_temporary.html

Lines changed: 6 additions & 6 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;type_traits&#34;], &#34;id-type&#34;: [&#34;class template&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;cpp&#34;: [&#34;cpp23&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;3d654199c0ffb6163d27701559b999171b324ac2&#34;, &#34;source&#34;: &#34;#include &lt;iostream&gt;\n\nstruct S {\n S() { std::cout &lt;&lt; \&#34;S construct\&#34; &lt;&lt; std::endl; }\n ~S() { std::cout &lt;&lt; \&#34;S destruct\&#34; &lt;&lt; std::endl; }\n};\n\nS&amp;&amp; f() { return S{}; }\n\nint main() {\n std::cout &lt;&lt; \&#34;1\&#34; &lt;&lt; std::endl;\n\n // f \u306e\u623b\u308a\u5024\u306f s \u306b\u675f\u7e1b\u3055\u308c\u3066\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u305f\u304b\uff1f\n // \u5b9f\u969b\u306b\u306f\u3053\u306e\u5ba3\u8a00\u306e1\u6587\u304c\u7d42\u4e86\u3057\u305f\u969b\u306b f \u306e\u623b\u308a\u5024\u306f\u7834\u68c4\u3055\u308c\u3066\u3044\u308b\n S&amp;&amp; s(f());\n\n std::cout &lt;&lt; \&#34;2\&#34; &lt;&lt; std::endl;\n}\n&#34;}, {&#34;id&#34;: &#34;aaee72f4467ca41218c903e7be040ffa1c51aa94&#34;, &#34;source&#34;: &#34;#include &lt;type_traits&gt;\n\nstruct A {\n A() = default;\n A(int) {}\n};\n\nstruct B : A {\n explicit B(int) {}\n};\n\nstruct C {\n operator struct A() { return A{}; }\n explicit operator struct B() { return B{0}; }\n};\n\nint main()\n{\n // OK: \u308f\u304b\u308a\u3084\u3059\u304f\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u308b\u30bf\u30a4\u30d7\n static_assert(std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, int&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;const int&amp;, int&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, B&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;const A&amp;&amp;, B&gt;);\n\n // OK: \u5909\u63db\u3055\u308c\u3066 rvalue \u306b\u306a\u3063\u3066\u304b\u3089\u675f\u7e1b\u3055\u308c\u3066\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u308b\u30bf\u30a4\u30d7\n static_assert(std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, long&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, long&amp;&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, long&amp;&amp;&gt;);\n\n // OK: explicit \u3067\u306f\u306a\u3044\u306e\u3067\u5909\u63db\u3055\u308c\u3066 rvalue \u306b\u306a\u3063\u3066\u304b\u3089\u675f\u7e1b\u3055\u308c\u3066\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u308b\u30bf\u30a4\u30d7\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, C&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, C&amp;&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, C&amp;&amp;&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, int&gt;);\n\n // OK: \u5909\u63db\u3055\u308c\u3066 rvalue \u306b\u306a\u3063\u3066\u304b\u3089\u675f\u7e1b\u3055\u308c\u3066\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u308b\u30bf\u30a4\u30d7\n // C \u2192 B \u306e\u5909\u63db\u306f explicit \u3060\u304c\u3001\u4e38\u30ab\u30c3\u30b3\u521d\u671f\u5316\u306a\u306e\u3067\u5909\u63db\u3067\u304d\u308b\n static_assert(std::reference_constructs_from_temporary_v&lt;B&amp;&amp;, C&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;B&amp;&amp;, C&amp;&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;B&amp;&amp;, C&amp;&amp;&gt;);\n\n\n // NG: const \u3067\u306f\u306a\u3044\u5de6\u8fba\u5024\u53c2\u7167\u306f\u5bff\u547d\u3092\u5ef6\u9577\u3057\u306a\u3044\u3093\u3067\u3059\u30bf\u30a4\u30d7\n // 1\u3064\u76ee3\u3064\u76ee\u306f\u305d\u3082\u305d\u3082\u53c2\u7167\u305d\u306e\u3082\u306e\u304c\u69cb\u7bc9\u51fa\u6765\u306a\u3044\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;, int&gt;);\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;, int&amp;&gt;);\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;, int&amp;&amp;&gt;);\n\n // NG: \u69cb\u7bc9\u3067\u304d\u306a\u3044\u30d1\u30bf\u30fc\u30f3\u3068\u53f3\u8fba\u5024\u53c2\u7167\u306f\u533a\u5225\u3059\u308b\u30d1\u30bf\u30fc\u30f3\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, int&amp;&gt;);\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, int&amp;&amp;&gt;);\n\n // NG: explicit \u306a\u306e\u3067\u5909\u63db\u51fa\u6765\u305a\u306b\u8a70\u3080\u30d1\u30bf\u30fc\u30f3\n static_assert(false == std::reference_constructs_from_temporary_v&lt;B&amp;&amp;, int&gt;);\n}\n\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;type_traits&#34;, &#34;reference_constructs_from_temporary&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;type_traits&#34;], &#34;id-type&#34;: [&#34;class template&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;cpp&#34;: [&#34;cpp23&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;3d654199c0ffb6163d27701559b999171b324ac2&#34;, &#34;source&#34;: &#34;#include &lt;iostream&gt;\n\nstruct S {\n S() { std::cout &lt;&lt; \&#34;S construct\&#34; &lt;&lt; std::endl; }\n ~S() { std::cout &lt;&lt; \&#34;S destruct\&#34; &lt;&lt; std::endl; }\n};\n\nS&amp;&amp; f() { return S{}; }\n\nint main() {\n std::cout &lt;&lt; \&#34;1\&#34; &lt;&lt; std::endl;\n\n // f \u306e\u623b\u308a\u5024\u306f s \u306b\u675f\u7e1b\u3055\u308c\u3066\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u305f\u304b\uff1f\n // \u5b9f\u969b\u306b\u306f\u3053\u306e\u5ba3\u8a00\u306e1\u6587\u304c\u7d42\u4e86\u3057\u305f\u969b\u306b f \u306e\u623b\u308a\u5024\u306f\u7834\u68c4\u3055\u308c\u3066\u3044\u308b\n S&amp;&amp; s(f());\n\n std::cout &lt;&lt; \&#34;2\&#34; &lt;&lt; std::endl;\n}\n&#34;}, {&#34;id&#34;: &#34;4413589fa1d677e676739c413cd7f29044a5db10&#34;, &#34;source&#34;: &#34;#include &lt;type_traits&gt;\n\nstruct A {\n A() = default;\n A(int) {}\n};\n\nstruct B : A {\n explicit B(int) {}\n};\n\nstruct C {\n operator struct A() { return A{}; }\n explicit operator struct B() { return B{0}; }\n};\n\nint main()\n{\n // OK: \u308f\u304b\u308a\u3084\u3059\u304f\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u308b\u30bf\u30a4\u30d7\n static_assert(std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, int&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;const int&amp;, int&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, B&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;const A&amp;&amp;, B&gt;);\n\n // OK: \u5909\u63db\u3055\u308c\u3066 rvalue \u306b\u306a\u3063\u3066\u304b\u3089\u675f\u7e1b\u3055\u308c\u3066\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u308b\u30bf\u30a4\u30d7\n static_assert(std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, long&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, long&amp;&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, long&amp;&amp;&gt;);\n\n // OK: explicit \u3067\u306f\u306a\u3044\u306e\u3067\u5909\u63db\u3055\u308c\u3066 rvalue \u306b\u306a\u3063\u3066\u304b\u3089\u675f\u7e1b\u3055\u308c\u3066\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u308b\u30bf\u30a4\u30d7\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, C&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, C&amp;&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, C&amp;&amp;&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;A&amp;&amp;, int&gt;);\n\n // OK: \u5909\u63db\u3055\u308c\u3066 rvalue \u306b\u306a\u3063\u3066\u304b\u3089\u675f\u7e1b\u3055\u308c\u3066\u5bff\u547d\u304c\u5ef6\u9577\u3055\u308c\u308b\u30bf\u30a4\u30d7\n // C \u2192 B \u306e\u5909\u63db\u306f explicit \u3060\u304c\u3001\u4e38\u30ab\u30c3\u30b3\u521d\u671f\u5316\u306a\u306e\u3067\u5909\u63db\u3067\u304d\u308b\n static_assert(std::reference_constructs_from_temporary_v&lt;B&amp;&amp;, C&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;B&amp;&amp;, C&amp;&gt;);\n static_assert(std::reference_constructs_from_temporary_v&lt;B&amp;&amp;, C&amp;&amp;&gt;);\n\n\n // NG: const \u3067\u306f\u306a\u3044\u5de6\u8fba\u5024\u53c2\u7167\u306f\u5bff\u547d\u3092\u5ef6\u9577\u3057\u306a\u3044\u30bf\u30a4\u30d7\n // 1\u3064\u76ee3\u3064\u76ee\u306f\u305d\u3082\u305d\u3082\u53c2\u7167\u305d\u306e\u3082\u306e\u304c\u69cb\u7bc9\u51fa\u6765\u306a\u3044\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;, int&gt;);\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;, int&amp;&gt;);\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;, int&amp;&amp;&gt;);\n\n // NG: \u69cb\u7bc9\u3067\u304d\u306a\u3044\u30d1\u30bf\u30fc\u30f3\u3068\u53f3\u8fba\u5024\u53c2\u7167\u306f\u533a\u5225\u3059\u308b\u30d1\u30bf\u30fc\u30f3\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, int&amp;&gt;);\n static_assert(false == std::reference_constructs_from_temporary_v&lt;int&amp;&amp;, int&amp;&amp;&gt;);\n\n // NG: explicit \u306a\u306e\u3067\u5909\u63db\u51fa\u6765\u305a\u306b\u8a70\u3080\u30d1\u30bf\u30fc\u30f3\n static_assert(false == std::reference_constructs_from_temporary_v&lt;B&amp;&amp;, int&gt;);\n}\n\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;type_traits&#34;, &#34;reference_constructs_from_temporary&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -188,12 +188,12 @@
188188

189189
<p class="text-right"><small>
190190
最終更新日時(UTC):
191-
<span itemprop="datePublished" content="2026-03-23T06:46:05">
192-
2026年03月23日 06時46分05秒
191+
<span itemprop="datePublished" content="2026-04-02T07:56:01">
192+
2026年04月02日 07時56分01秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
196-
<span itemprop="name">Raclamusi</span>
196+
<span itemprop="name">teruyamato0731</span>
197197
</span>
198198
が更新
199199
</small></p>
@@ -267,7 +267,7 @@ <h3>出力</h3>
267267
2
268268
</code></pre></p>
269269
<h2></h2>
270-
<p><div class="yata" id="aaee72f4467ca41218c903e7be040ffa1c51aa94"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../type_traits.html">&lt;type_traits&gt;</a></span>
270+
<p><div class="yata" id="4413589fa1d677e676739c413cd7f29044a5db10"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../type_traits.html">&lt;type_traits&gt;</a></span>
271271

272272
<span class="k">struct</span><span class="w"> </span><span class="nc">A</span><span class="w"> </span><span class="p">{</span>
273273
<span class="w"> </span><span class="n">A</span><span class="p">()</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">default</span><span class="p">;</span>
@@ -309,7 +309,7 @@ <h2>例</h2>
309309
<span class="w"> </span><span class="k">static_assert</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">reference_constructs_from_temporary_v</span><span class="o">&lt;</span><span class="n">B</span><span class="o">&amp;&amp;</span><span class="p">,</span><span class="w"> </span><span class="n">C</span><span class="o">&amp;&amp;&gt;</span><span class="p">);</span>
310310

311311

312-
<span class="w"> </span><span class="c1">// NG: const ではない左辺値参照は寿命を延長しないんですタイプ</span>
312+
<span class="w"> </span><span class="c1">// NG: const ではない左辺値参照は寿命を延長しないタイプ</span>
313313
<span class="w"> </span><span class="c1">// 1つ目3つ目はそもそも参照そのものが構築出来ない</span>
314314
<span class="w"> </span><span class="k">static_assert</span><span class="p">(</span><span class="nb">false</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">reference_constructs_from_temporary_v</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&amp;</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">&gt;</span><span class="p">);</span>
315315
<span class="w"> </span><span class="k">static_assert</span><span class="p">(</span><span class="nb">false</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">reference_constructs_from_temporary_v</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&amp;</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">&amp;&gt;</span><span class="p">);</span>

0 commit comments

Comments
 (0)