Skip to content

Commit 25d3204

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 53be764 commit 25d3204

File tree

7 files changed

+1086
-44
lines changed

7 files changed

+1086
-44
lines changed

lang/cpp20.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,12 +176,12 @@
176176

177177
<p class="text-right"><small>
178178
最終更新日時(UTC):
179-
<span itemprop="datePublished" content="2024-11-11T08:15:48">
180-
2024年11月11日 08時15分48秒
179+
<span itemprop="datePublished" content="2025-01-23T16:56:13">
180+
2025年01月23日 16時56分13秒
181181
</span>
182182
<br/>
183183
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
184-
<span itemprop="name">Akira Takahashi</span>
184+
<span itemprop="name">onihusube</span>
185185
</span>
186186
が更新
187187
</small></p>
@@ -259,7 +259,7 @@ <h3>クラス</h3>
259259
<td>クラスの<code>delete</code>演算子が呼び出される前にデストラクタが呼ばれないようにするオプションを追加</td>
260260
</tr>
261261
<tr>
262-
<td><span href="https://cpprefjp.github.io/lang/cpp20/conditionally_trivial_special_member_functions.md.nolink">条件付きで特殊メンバ関数をトリビアルに定義するように</span></td>
262+
<td><a href="cpp20/conditionally_trivial_special_member_functions.html">条件付きで特殊メンバ関数をトリビアルに定義するように</a></td>
263263
<td>制約によってトリビアルな特殊メンバ関数と非トリビアルな特殊メンバ関数を<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>できるようにする</td>
264264
</tr>
265265
<tr>
Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,290 @@
1+
<!doctype html>
2+
<html class="cpprefjp" lang="ja" itemscope="" itemtype="http://schema.org/WebPage">
3+
<head>
4+
5+
6+
<!-- Google tag (gtag.js) -->
7+
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NXNBNVBTJS"></script>
8+
<script>
9+
window.dataLayer = window.dataLayer || [];
10+
function gtag(){dataLayer.push(arguments);}
11+
gtag('js', new Date());
12+
13+
gtag('config', 'G-NXNBNVBTJS');
14+
</script>
15+
16+
17+
<meta charset="UTF-8">
18+
19+
<title>条件付きで特殊メンバ関数をトリビアルに定義するように - cpprefjp C++日本語リファレンス</title>
20+
21+
<meta name="viewport" content="width=device-width,initial-scale=1">
22+
<meta name="keywords" content="
23+
C++,標準ライブラリ,リファレンス,ドキュメント,STL,std,cpp20
24+
">
25+
<meta name="title" content="条件付きで特殊メンバ関数をトリビアルに定義するように - cpprefjp C++日本語リファレンス" />
26+
<meta itemprop="name" content="条件付きで特殊メンバ関数をトリビアルに定義するように - cpprefjp C++日本語リファレンス" />
27+
<meta property="og:title" content="条件付きで特殊メンバ関数をトリビアルに定義するように - cpprefjp C++日本語リファレンス" />
28+
<meta property="og:url" content="https://cpprefjp.github.io/lang/cpp20/conditionally_trivial_special_member_functions.html" />
29+
<meta property="og:site_name" content="cpprefjp - C++日本語リファレンス" />
30+
<meta property="og:type" content="article" />
31+
<meta property="og:description" content="" />
32+
<meta name="twitter:card" content="summary" />
33+
<meta name="twitter:title" content="条件付きで特殊メンバ関数をトリビアルに定義するように - cpprefjp C++日本語リファレンス" />
34+
<meta name="twitter:url" content="https://cpprefjp.github.io/lang/cpp20/conditionally_trivial_special_member_functions.html" />
35+
<meta name="twitter:description" content="" />
36+
37+
38+
<link rel="alternate" type="application/atom+xml" title="Atom" href="https://cpprefjp.github.io/rss.xml" />
39+
40+
41+
<link rel="apple-touch-icon" sizes="180x180" href="../../static/favicons/apple-touch-icon.png?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d">
42+
<link rel="icon" type="image/png" sizes="32x32" href="../../static/favicons/favicon-32x32.png?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d">
43+
<link rel="icon" type="image/png" sizes="16x16" href="../../static/favicons/favicon-16x16.png?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d">
44+
<link rel="manifest" href="../../manifest.json?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d">
45+
<meta name="theme-color" content="#f5f8fc">
46+
47+
<link rel="stylesheet" href="../../static/pygments/default.css?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d">
48+
<!-- <link rel="stylesheet" href="../../static/css/root.css"> -->
49+
50+
51+
52+
53+
54+
<link href="../../static/kunai/css/kunai-stage-0.css?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d" rel="stylesheet">
55+
<link href="../../static/kunai/css/kunai-stage-1.css?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d" rel="stylesheet">
56+
<link href="../../static/kunai/css/kunai-stage-2.css?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d" rel="stylesheet">
57+
<link href="../../static/kunai/css/kunai-stage-3.css?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d" rel="stylesheet">
58+
59+
<script type="text/javascript" src="../../static/kunai/js/kunai-vendor.js?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d"></script>
60+
<script type="text/javascript" src="../../static/kunai/js/kunai.js?cachebust=4d86cb7e867236a9be5b1332a0aeb5c96f257c5d"></script>
61+
62+
<script type="text/javascript">
63+
document.addEventListener('DOMContentLoaded', function() {
64+
var kn = new Kunai;
65+
kn.cpprefjp();
66+
});
67+
</script>
68+
69+
</head>
70+
<body>
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;cpp&#34;: [&#34;cpp20&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;f13c43f217dd0de2a102f881250a84a7c361e710&#34;, &#34;source&#34;: &#34;// (\u3053\u3053\u306b\u306f\u3001\u8a00\u8a9e\u6a5f\u80fd\u306e\u4f7f\u3044\u65b9\u3092\u89e3\u8aac\u3059\u308b\u305f\u3081\u306e\u3001\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3092\u8a18\u8ff0\u3057\u307e\u3059\u3002)\n// (\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3068main()\u95a2\u6570\u3092\u542b\u3080\u3001\u5b9f\u884c\u53ef\u80fd\u306a\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3092\u8a18\u8ff0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u306e\u3088\u3046\u306a\u30b3\u30fc\u30c9\u30d6\u30ed\u30c3\u30af\u306b\u306fexample\u30bf\u30b0\u3092\u4ed8\u3051\u307e\u3059\u3002)\n\n#include &lt;iostream&gt;\n\nint main()\n{\n int variable = 0;\n std::cout &lt;&lt; variable &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;lang&#34;, &#34;cpp20&#34;, &#34;conditionally_trivial_special_member_functions&#34;]}">
72+
<nav class="navbar navbar-default" role="navigation">
73+
<div class="container-fluid">
74+
<div class="navbar-header">
75+
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
76+
<span class="sr-only">Toggle navigation</span>
77+
<span class="icon-bar"></span>
78+
<span class="icon-bar"></span>
79+
<span class="icon-bar"></span>
80+
</button>
81+
<a class="navbar-brand" href="../../index.html">
82+
<div class="title-wrapper clearfix">
83+
<div class="title">cpprefjp - C++日本語リファレンス</div>
84+
</div>
85+
</a>
86+
</div>
87+
88+
<div class="collapse navbar-collapse" id="navbar-collapse">
89+
<ul class="nav navbar-nav navbar-right">
90+
<li>
91+
<div class="google-search">
92+
93+
94+
<script>
95+
(function() {
96+
var cx = '013316413321391058734:ji_u66hl7hq';
97+
var gcse = document.createElement('script');
98+
gcse.type = 'text/javascript';
99+
gcse.async = true;
100+
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
101+
'//www.google.com/cse/cse.js?cx=' + cx;
102+
var s = document.getElementsByTagName('script')[0];
103+
s.parentNode.insertBefore(gcse, s);
104+
})();
105+
</script>
106+
<div class="gcse-search"></div>
107+
108+
109+
</div>
110+
</li>
111+
<li>
112+
<a href="https://github.com/cpprefjp/site">GitHub Project</a>
113+
</li>
114+
</ul>
115+
</div>
116+
</div>
117+
</nav>
118+
</header>
119+
120+
<main id="main" role="main">
121+
<div class="container-fluid">
122+
<div class="row">
123+
<div class="col-sm-9 col-sm-push-3" itemscope itemtype="http://schema.org/Article">
124+
<div class="row">
125+
<div class="col-sm-12 google-search-result">
126+
<gcse:searchresults></gcse:searchresults>
127+
</div>
128+
</div>
129+
<div class="row">
130+
<div class="col-sm-12 content-header">
131+
132+
<ol class="breadcrumb">
133+
134+
<li itemscope itemtype="http://www.schema.org/SiteNavigationElement">
135+
<span>
136+
137+
<a href="../../index.html" itemprop="url">
138+
139+
<i class="fa fa-fw fa-home"></i>
140+
141+
</a>
142+
143+
</span>
144+
</li>
145+
146+
<li itemscope itemtype="http://www.schema.org/SiteNavigationElement">
147+
<span>
148+
149+
<a href="../../lang.html" itemprop="url">
150+
151+
<span itemprop="name">言語機能</span>
152+
153+
</a>
154+
155+
</span>
156+
</li>
157+
158+
<li itemscope itemtype="http://www.schema.org/SiteNavigationElement">
159+
<span>
160+
161+
<a href="../../lang/cpp20.html" itemprop="url">
162+
163+
<span itemprop="name">C++20</span>
164+
165+
</a>
166+
167+
</span>
168+
</li>
169+
170+
<li class="active" itemscope itemtype="http://www.schema.org/SiteNavigationElement">
171+
<span>
172+
173+
174+
<span itemprop="name">条件付きで特殊メンバ関数をトリビアルに定義するように</span>
175+
176+
177+
</span>
178+
</li>
179+
180+
</ol>
181+
<div class="crsearch"></div>
182+
183+
</div>
184+
</div>
185+
<div class="row">
186+
<div class="col-sm-12 edit-button">
187+
188+
189+
<p class="text-right"><small>
190+
最終更新日時(UTC):
191+
<span itemprop="datePublished" content="2025-01-23T16:56:13">
192+
2025年01月23日 16時56分13秒
193+
</span>
194+
<br/>
195+
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
196+
<span itemprop="name">onihusube</span>
197+
</span>
198+
が更新
199+
</small></p>
200+
201+
202+
<p class="text-right">
203+
<a class="history" target="_blank" href="https://github.com/cpprefjp/site/commits/master/lang/cpp20/conditionally_trivial_special_member_functions.md">
204+
<span class="fa fa-fw fa-clock-o fa-flip-horizontal"></span>履歴
205+
</a>
206+
<a class="edit" target="_blank" href="https://github.com/cpprefjp/site/edit/master/lang/cpp20/conditionally_trivial_special_member_functions.md">
207+
<span class="fa fa-fw fa-pencil"></span>編集
208+
</a>
209+
</p>
210+
</div>
211+
</div>
212+
<div class="row">
213+
<div class="col-sm-12 content-body">
214+
215+
<h1 itemprop="name"><span class="token">条件付きで特殊メンバ関数をトリビアルに定義するように</span><span class="cpp cpp20" title="C++20で追加">(C++20)</span></h1>
216+
<div itemprop="articleBody"><p>このページはC++20に採用された言語機能の変更を解説しています。</p>
217+
<p>のちのC++規格でさらに変更される場合があるため<a href="#relative-page">関連項目</a>を参照してください。</p>
218+
<h2>概要</h2>
219+
<p>クラスの特殊メンバ関数(コンストラクタ・代入演算子・デストラクタ)の<code>default</code>宣言をコンセプトによって制約することで、テンプレートパラメータの性質に応じて優先的に選択させることができる様になる。</p>
220+
<p><div class="codehilite"><pre><span></span><code><span class="k">template</span><span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="o">&gt;</span>
221+
<span class="k">struct</span> <span class="n">wrap</span> <span class="p">{</span>
222+
223+
<span class="c1">// 1. 制約されたdefaultなコピーコンストラクタ</span>
224+
<span class="n">wrap</span><span class="p">(</span><span class="k">const</span> <span class="n">wrap</span><span class="o">&amp;</span><span class="p">)</span> <span class="n">requires</span> <span class="n">std</span><span class="o">::</span><span class="n">is_trivially_copy_constructible_v</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span>
225+
226+
<span class="c1">// 2. ユーザー定義コピーコンストラクタ</span>
227+
<span class="n">wrap</span><span class="p">(</span><span class="k">const</span> <span class="n">wrap</span><span class="o">&amp;</span><span class="p">)</span> <span class="p">{</span>
228+
<span class="p">...</span>
229+
<span class="p">}</span>
230+
<span class="p">};</span>
231+
</code></pre></div>
232+
</p>
233+
<p><code>T</code><code>std::is_trivially_copy_constructible</code>を満たす場合、1の宣言が選択され<code>wrap&lt;T&gt;</code>のコピーコンストラクタは<code>default</code>実装される(2のコンストラクタが選択されることは無い)。<code>T</code><code>std::is_trivially_copy_constructible</code>を満たさない場合、2の宣言が選択され<code>wrap&lt;T&gt;</code>のコピーコンストラクタは<a class="cpprefjp-defined-word" data-desc="プログラム定義。ユーザー(プログラマ)によって定義されること(標準ライブラリで定義されるものを除く)">ユーザー定義</a>される。</p>
234+
<p>特に、<code>T</code>がトリビアルコピー可能である場合にこの仕組みによって1のコンストラクタが選択されれば、(他の条件を満たしているものとして)<code>wrap&lt;T&gt;</code>もまたトリビアルコピー可能となる。</p>
235+
<h2>仕様</h2>
236+
<p>(執筆中)</p>
237+
<h2></h2>
238+
<p>(執筆中)</p>
239+
<p><div class="yata" id="f13c43f217dd0de2a102f881250a84a7c361e710"><div class="codehilite"><pre><span></span><code><span class="c1">// (ここには、言語機能の使い方を解説するための、サンプルコードを記述します。)</span>
240+
<span class="c1">// (インクルードとmain()関数を含む、実行可能なサンプルコードを記述してください。そのようなコードブロックにはexampleタグを付けます。)</span>
241+
242+
<span class="cp">#include</span> <span class="cpf"><a href="../../reference/iostream.html">&lt;iostream&gt;</a></span><span class="cp"></span>
243+
244+
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
245+
<span class="p">{</span>
246+
<span class="kt">int</span> <span class="n"><span style="color:#ff0000">variable</span></span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
247+
<span class="n"><a href="../../reference/iostream/cout.html">std::cout</a></span> <span class="o">&lt;&lt;</span> <span class="n"><span style="color:#ff0000">variable</span></span> <span class="o">&lt;&lt;</span> <span class="n"><a href="../../reference/ostream/endl.html">std::endl</a></span><span class="p">;</span>
248+
<span class="p">}</span>
249+
</code></pre></div>
250+
</div></p>
251+
<h3>出力</h3>
252+
<p><pre><code>0
253+
</code></pre></p>
254+
<h2>この機能が必要になった背景・経緯</h2>
255+
<p>(執筆中)</p>
256+
<h2>検討されたほかの選択肢</h2>
257+
<p>(執筆中)</p>
258+
<h2>## <a href="#relative-page" id="relative-page">関連項目</a></h2>
259+
<ul>
260+
<li><a href="concepts.html">コンセプト</a></li>
261+
</ul>
262+
<h2>参照</h2>
263+
<ul>
264+
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0848r0.html" target="_blank">P0848R0 Conditionally Trivial Special Member Functions</a></li>
265+
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0848r3.html" target="_blank">P0848R3 Conditionally Trivial Special Member Functions</a></li>
266+
</ul></div>
267+
268+
</div>
269+
</div>
270+
</div>
271+
272+
273+
<div id="sidebar" class="col-sm-3 col-sm-pull-9">
274+
</div>
275+
276+
277+
</div>
278+
</div>
279+
</main>
280+
<footer class="footer navbar navbar-default">
281+
<div class="container-fluid">
282+
<p><small>
283+
本サイトの情報は、
284+
<a href="https://creativecommons.org/licenses/by/3.0/deed.ja" rel="nofollow">クリエイティブ・コモンズ 表示 3.0 非移植 ライセンス(CC BY)</a>
285+
の下に提供されています。
286+
</small></p>
287+
</div>
288+
</footer>
289+
</body>
290+
</html>

reference/chrono/make24.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ <h2>例</h2>
239239
<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="nb">false</span><span class="p">)</span> <span class="o">==</span> <span class="n"><a href="duration/op_h.html">0h</a></span><span class="p">);</span>
240240

241241
<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="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="n"><a href="duration/op_h.html">12h</a></span><span class="p">);</span>
242-
<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="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="n"><a href="duration/op_h.html">3h</a></span><span class="p">);</span>
242+
<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="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1l</span><span class="n">ICHohINidCqaytmZLrjqjkhIQpzByvn</span><span class="p">);</span>
243243
<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="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="n"><a href="duration/op_h.html">15h</a></span><span class="p">);</span>
244244
<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="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="n"><a href="duration/op_h.html">23h</a></span><span class="p">);</span>
245245
<span class="p">}</span>

0 commit comments

Comments
 (0)