|
68 | 68 |
|
69 | 69 | </head> |
70 | 70 | <body> |
71 | | -<header data-kunai-mdinfo="{"meta": {"header": ["type_traits"], "id-type": ["class template"], "namespace": ["std"], "cpp": ["cpp23"]}, "sources": [{"id": "3d654199c0ffb6163d27701559b999171b324ac2", "source": "#include <iostream>\n\nstruct S {\n S() { std::cout << \"S construct\" << std::endl; }\n ~S() { std::cout << \"S destruct\" << std::endl; }\n};\n\nS&& f() { return S{}; }\n\nint main() {\n std::cout << \"1\" << 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&& s(f());\n\n std::cout << \"2\" << std::endl;\n}\n"}, {"id": "aaee72f4467ca41218c903e7be040ffa1c51aa94", "source": "#include <type_traits>\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<int&&, int>);\n static_assert(std::reference_constructs_from_temporary_v<const int&, int>);\n static_assert(std::reference_constructs_from_temporary_v<A&&, B>);\n static_assert(std::reference_constructs_from_temporary_v<const A&&, B>);\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<int&&, long>);\n static_assert(std::reference_constructs_from_temporary_v<int&&, long&>);\n static_assert(std::reference_constructs_from_temporary_v<int&&, long&&>);\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<A&&, C>);\n static_assert(std::reference_constructs_from_temporary_v<A&&, C&>);\n static_assert(std::reference_constructs_from_temporary_v<A&&, C&&>);\n static_assert(std::reference_constructs_from_temporary_v<A&&, int>);\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<B&&, C>);\n static_assert(std::reference_constructs_from_temporary_v<B&&, C&>);\n static_assert(std::reference_constructs_from_temporary_v<B&&, C&&>);\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<int&, int>);\n static_assert(false == std::reference_constructs_from_temporary_v<int&, int&>);\n static_assert(false == std::reference_constructs_from_temporary_v<int&, int&&>);\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<int&&, int&>);\n static_assert(false == std::reference_constructs_from_temporary_v<int&&, int&&>);\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<B&&, int>);\n}\n\n"}], "page_id": ["reference", "type_traits", "reference_constructs_from_temporary"]}"> |
| 71 | +<header data-kunai-mdinfo="{"meta": {"header": ["type_traits"], "id-type": ["class template"], "namespace": ["std"], "cpp": ["cpp23"]}, "sources": [{"id": "3d654199c0ffb6163d27701559b999171b324ac2", "source": "#include <iostream>\n\nstruct S {\n S() { std::cout << \"S construct\" << std::endl; }\n ~S() { std::cout << \"S destruct\" << std::endl; }\n};\n\nS&& f() { return S{}; }\n\nint main() {\n std::cout << \"1\" << 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&& s(f());\n\n std::cout << \"2\" << std::endl;\n}\n"}, {"id": "4413589fa1d677e676739c413cd7f29044a5db10", "source": "#include <type_traits>\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<int&&, int>);\n static_assert(std::reference_constructs_from_temporary_v<const int&, int>);\n static_assert(std::reference_constructs_from_temporary_v<A&&, B>);\n static_assert(std::reference_constructs_from_temporary_v<const A&&, B>);\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<int&&, long>);\n static_assert(std::reference_constructs_from_temporary_v<int&&, long&>);\n static_assert(std::reference_constructs_from_temporary_v<int&&, long&&>);\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<A&&, C>);\n static_assert(std::reference_constructs_from_temporary_v<A&&, C&>);\n static_assert(std::reference_constructs_from_temporary_v<A&&, C&&>);\n static_assert(std::reference_constructs_from_temporary_v<A&&, int>);\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<B&&, C>);\n static_assert(std::reference_constructs_from_temporary_v<B&&, C&>);\n static_assert(std::reference_constructs_from_temporary_v<B&&, C&&>);\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<int&, int>);\n static_assert(false == std::reference_constructs_from_temporary_v<int&, int&>);\n static_assert(false == std::reference_constructs_from_temporary_v<int&, int&&>);\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<int&&, int&>);\n static_assert(false == std::reference_constructs_from_temporary_v<int&&, int&&>);\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<B&&, int>);\n}\n\n"}], "page_id": ["reference", "type_traits", "reference_constructs_from_temporary"]}"> |
72 | 72 | <nav class="navbar navbar-default" role="navigation"> |
73 | 73 | <div class="container-fluid"> |
74 | 74 | <div class="navbar-header"> |
|
188 | 188 |
|
189 | 189 | <p class="text-right"><small> |
190 | 190 | 最終更新日時(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秒 |
193 | 193 | </span> |
194 | 194 | <br/> |
195 | 195 | <span itemprop="author" itemscope itemtype="http://schema.org/Person"> |
196 | | - <span itemprop="name">Raclamusi</span> |
| 196 | + <span itemprop="name">teruyamato0731</span> |
197 | 197 | </span> |
198 | 198 | が更新 |
199 | 199 | </small></p> |
@@ -267,7 +267,7 @@ <h3>出力</h3> |
267 | 267 | 2 |
268 | 268 | </code></pre></p> |
269 | 269 | <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"><type_traits></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"><type_traits></a></span> |
271 | 271 |
|
272 | 272 | <span class="k">struct</span><span class="w"> </span><span class="nc">A</span><span class="w"> </span><span class="p">{</span> |
273 | 273 | <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> |
309 | 309 | <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"><</span><span class="n">B</span><span class="o">&&</span><span class="p">,</span><span class="w"> </span><span class="n">C</span><span class="o">&&></span><span class="p">);</span> |
310 | 310 |
|
311 | 311 |
|
312 | | -<span class="w"> </span><span class="c1">// NG: const ではない左辺値参照は寿命を延長しないんですタイプ</span> |
| 312 | +<span class="w"> </span><span class="c1">// NG: const ではない左辺値参照は寿命を延長しないタイプ</span> |
313 | 313 | <span class="w"> </span><span class="c1">// 1つ目3つ目はそもそも参照そのものが構築出来ない</span> |
314 | 314 | <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"><</span><span class="kt">int</span><span class="o">&</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">></span><span class="p">);</span> |
315 | 315 | <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"><</span><span class="kt">int</span><span class="o">&</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">&></span><span class="p">);</span> |
|
0 commit comments