|
2 | 2 | <feed xmlns="http://www.w3.org/2005/Atom"> |
3 | 3 | <title>cpprefjp - C++日本語リファレンス</title> |
4 | 4 | <link href="https://cpprefjp.github.io" /> |
5 | | - <updated>2026-09-15T09:54:17.521131</updated> |
6 | | - <id>f84e6f2b-df41-4b34-bde4-570b32664fb8</id> |
| 5 | + <updated>2026-09-15T10:40:36.727506</updated> |
| 6 | + <id>0704612a-f39a-4327-923b-2f96b1a0c56e</id> |
7 | 7 |
|
8 | 8 |
|
| 9 | + <entry> |
| 10 | + <title>コンストラクタ -- fix in ambiguous convertion</title> |
| 11 | + <link href="https://cpprefjp.github.io/reference/chrono/zoned_time/op_constructor.html"/> |
| 12 | + <id>359eb1e0a84e5cb5851c7dc5bb18006365427c54:reference/chrono/zoned_time/op_constructor.md</id> |
| 13 | + <updated>2026-09-15T19:38:38+09:00</updated> |
| 14 | + |
| 15 | + <summary type="html"><pre><code>diff --git a/reference/chrono/zoned_time/op_constructor.md b/reference/chrono/zoned_time/op_constructor.md |
| 16 | +index 2d85d1059..a7926e226 100644 |
| 17 | +--- a/reference/chrono/zoned_time/op_constructor.md |
| 18 | ++++ b/reference/chrono/zoned_time/op_constructor.md |
| 19 | +@@ -111,7 +111,12 @@ zoned_time(string_view name, |
| 20 | + |
| 21 | + ## 備考 |
| 22 | + - [`local_time`](/reference/chrono/local_time.md)型のローカル時間を受け取るコンストラクタでは、[`sys_time`](/reference/chrono/sys_time.md)型のシステム時間への変換が行われ、システム時間としてメンバ変数に保持される |
| 23 | +-- (9), (10) : ローカル時間からシステム時間への変換があいまいになる場合、早い時間側の候補に変換される |
| 24 | ++- (9), (10) : [`choose`](/reference/chrono/choose.md)を指定しないため、変換に失敗する場合は[`to_sys()`](/reference/chrono/time_zone/to_sys.md)から例外が送出される |
| 25 | ++ - ローカル時間からシステム時間への変換があいまいになる場合、[`ambiguous_local_time`](/reference/chrono/ambiguous_local_time.md)例外を送出する |
| 26 | ++ - 指定されたローカル時間が存在しない場合、[`nonexistent_local_time`](/reference/chrono/nonexistent_local_time.md)例外を送出する |
| 27 | ++- (11), (12) : [`choose`](/reference/chrono/choose.md)を指定するため、あいまいなローカル時間・存在しないローカル時間が指定されてもこれらの例外は送出されない |
| 28 | ++ - あいまいなローカル時間の場合、`c`で指定した側の候補に変換される |
| 29 | ++ - 存在しないローカル時間の場合、`c`の値にかかわらず、変換結果は同じ時間点となる |
| 30 | + |
| 31 | + |
| 32 | + ### 例 |
| 33 | +</code></pre></summary> |
| 34 | + |
| 35 | + <author> |
| 36 | + <name>rotarymars</name> |
| 37 | + <email>s.goto2050@gmail.com</email> |
| 38 | + </author> |
| 39 | + </entry> |
| 40 | + |
9 | 41 | <entry> |
10 | 42 | <title>duration -- fix in wrong explanation</title> |
11 | 43 | <link href="https://cpprefjp.github.io/reference/chrono/duration.html"/> |
@@ -605,86 +637,6 @@ index e67a44ecd..d18207ac8 100644 |
605 | 637 | } |
606 | 638 | ``` |
607 | 639 |
|
608 | | -</code></pre></summary> |
609 | | - |
610 | | - <author> |
611 | | - <name>Akira Takahashi</name> |
612 | | - <email>faithandbrave@gmail.com</email> |
613 | | - </author> |
614 | | - </entry> |
615 | | - |
616 | | - <entry> |
617 | | - <title>暗黙のラムダキャプチャを簡略化 [P0588R1] -- Merge pull request #1756 from cpprefjp/fix_odr_usable</title> |
618 | | - <link href="https://cpprefjp.github.io/lang/cpp20/simplifying_implicit_lambda_capture.html"/> |
619 | | - <id>23cccdd3c5dbd8f73bdbab529be955a46922e9bf:lang/cpp20/simplifying_implicit_lambda_capture.md</id> |
620 | | - <updated>2026-09-15T15:56:06+09:00</updated> |
621 | | - |
622 | | - <summary type="html"><pre><code>diff --git a/lang/cpp20/simplifying_implicit_lambda_capture.md b/lang/cpp20/simplifying_implicit_lambda_capture.md |
623 | | -index 8fbce21ed..41c705232 100644 |
624 | | ---- a/lang/cpp20/simplifying_implicit_lambda_capture.md |
625 | | -+++ b/lang/cpp20/simplifying_implicit_lambda_capture.md |
626 | | -@@ -29,12 +29,60 @@ void f() { |
627 | | - } |
628 | | - ``` |
629 | | - |
630 | | --構造化束縛で導入された名前はラムダ式でキャプチャできない、と明記された。しかしその後、「[構造化束縛を拡張して通常の変数宣言のように使用できるようにする](extending_structured_bindings_to_be_more_like_variable_declarations.md)」の仕様でそれが可能となったため、この仕様変更は打ち消された。 |
631 | | -+本提案では一旦、構造化束縛で導入された名前はラムダ式でキャプチャできない、と明記された。その後、「[構造化束縛を拡張して通常の変数宣言のように使用できるようにする](extending_structured_bindings_to_be_more_like_variable_declarations.md)」の仕様でそれが可能となったため、この部分は打ち消された。 |
632 | | -+ |
633 | | -+## 仕様 |
634 | | -+ラムダ式がどのローカル変数をキャプチャできるか、またそれをどこで使用できるかを規定するために、odr-usableという用語が導入された。 |
635 | | -+ |
636 | | -+ローカル変数、関数のパラメータ、構造化束縛で導入された名前、`*this`のように、関数のローカルな文脈に属するものをローカルエンティティ (*local entity*) と呼ぶ。ローカルエンティティは、その宣言から使用する地点までの間に挟まるスコープが、すべて以下のいずれかである場合に、その地点でodr-usableとなる。 |
637 | | -+ |
638 | | -+- ブロックスコープ (`{}`で囲まれた文のスコープ) |
639 | | -+- ラムダ式の関数パラメータスコープ (ラムダ式のパラメータを宣言できる範囲) であり、そのラムダ式がそのローカルエンティティを明示的にキャプチャしているかデフォルトキャプチャをもっていて、かつそのラムダ式の本体のブロックスコープも、使用する地点までの間に挟まっている |
640 | | -+ |
641 | | -+odr-usableではないローカルエンティティをodr-usedした場合、そのプログラムは不適格となる。 |
642 | | -+ |
643 | | -+```cpp |
644 | | -+void f(int n) { |
645 | | -+ [] { n = 1; }; // エラー: nをキャプチャしていないため、odr-usableではない |
646 | | -+ [&amp;] { n = 1; }; // OK: nをキャプチャしており、ラムダ式の本体の中で使用している |
647 | | -+ |
648 | | -+ struct A { |
649 | | -+ void g() { n = 2; } // エラー: ローカルクラスのスコープと、そのメンバ関数の |
650 | | -+ }; // 関数パラメータスコープが挟まる |
651 | | -+ |
652 | | -+ void g(int = n); // エラー: ラムダ式ではない関数の関数パラメータスコープが挟まる |
653 | | -+ |
654 | | -+ [=](int k = n) {}; // エラー: ラムダ式の関数パラメータスコープは挟まるが、 |
655 | | -+ // 本体のブロックスコープは挟まらない |
656 | | -+ |
657 | | -+ [&amp;] { [n]{ return n; }; }; // OK: 内側のラムダ式は、外側のラムダ式の本体の中にある |
658 | | -+} |
659 | | -+``` |
660 | | -+ |
661 | | -+### ラムダ式のデフォルト引数で外側のローカル変数を使用できない理由 |
662 | | -+キャプチャが効くのはラムダ式の本体の中だけであり、パラメータの宣言はその外側にある。そのため`[=](int k = n) {}`の`n`は、キャプチャしたコピーではなく、外側の`n`そのものを指す。 |
663 | | -+ |
664 | | -+デフォルト引数が評価されるのは、ラムダ式を書いた場所ではなく、クロージャオブジェクトを呼び出した場所である。クロージャオブジェクトはそれを作った関数の外へ持ち出せるため、仮にこれを許すと、すでに生存期間の終わったローカル変数を読むことになりうる。 |
665 | | -+ |
666 | | -+```cpp |
667 | | -+auto f(int n) { |
668 | | -+ return [=](int k = n) { return k; }; // エラー |
669 | | -+} |
670 | | -+ |
671 | | -+int main() { |
672 | | -+ auto g = f(3); |
673 | | -+ g(); // 仮に適格だとすると、ここで関数f()のパラメータnを読むことになる |
674 | | -+} |
675 | | -+``` |
676 | | - |
677 | | - |
678 | | - ## &lt;a id=&#34;relative-page&#34; href=&#34;#relative-page&#34;&gt;関連項目&lt;/a&gt; |
679 | | - - [C++17 構造化束縛](/lang/cpp17/structured_bindings.md) |
680 | | - - [C++20 構造化束縛を拡張して通常の変数宣言のように使用できるようにする](extending_structured_bindings_to_be_more_like_variable_declarations.md) |
681 | | -+- [C++20 構造化束縛した変数の参照キャプチャを許可](reference_capture_of_structured_bindings.md) |
682 | | - |
683 | | - ## 参照 |
684 | | - - [P0588R1 Simplifying implicit lambda capture](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0588r1.html) |
685 | | -+ - C++20で、ラムダ式での暗黙のキャプチャの規定が整理され、odr-usableが導入された |
686 | | -+- [CWG Issue 2380. capture-default makes too many references odr-usable](https://cplusplus.github.io/CWG/issues/2380.html) |
687 | | -+ - C++20の策定中に、odr-usableの条件へ「ラムダ式の本体のブロックスコープも挟まっていること」が追加された。この条件がないと、デフォルトキャプチャを書くだけでラムダ式のパラメータのデフォルト引数から外側のローカル変数を使用できてしまっていた |
688 | 640 | </code></pre></summary> |
689 | 641 |
|
690 | 642 | <author> |
|
0 commit comments