ブリストルでの会議の議事録を読みましたが、元の提案には言及していません。
分は正確です。N3588 (元のレシピ、Standardese なし) は委員会全体では議論されず、N3656 (エクストラクリスピー、Standardese あり) のみが議論されました。ミーティングに参加したことがない方には奇妙に思えるかもしれませんが、何が起こるかというと、ワーキング グループ (コア、エボリューション、ライブラリ、ライブラリ エボリューション) とスタディ グループ (ファイルシステムなど) が 1 週間並行して活動しているということです。最終的には、委員会全体に何を持ち込むべきかを決定するために、ストロー投票 (誰でも投票できる場所) を実施します。最終日から 2 日目には、委員会全体 (100 人以上) が集まり、正式な動議が簡単に議論され、ストロー投票 (投票メンバーのみが投票できる場所) が行われます。機能が十分に焼き付けられていない、または他の機能との統合に問題があるなどの懸念がある場合は、. それからこれはここで議論されます - しかし委員会全体は提案の微視的な詳細には目を向けません。基本的に、何かがそれを保証するのに十分なほど物議を醸すものである場合、それはとにかく投票に耐えられないため、その会議の検討から取り下げられます. 最終日には、委員会全体が再び会合し、実際の投票が行われます (投票メンバーのみ)。前日は試験運用だったので、通常、実際の投票中に驚きはありません。
LWG の議事録は公開されていませんが、何が起こったのかはわかります。N3588 には意図的に標準語が含まれていませんでした。そこで私が行ったことは、デザイン空間を探索し、どのような新しい表現を模倣すべきかを考え出し、さまざまなことに賛成または反対することでした。LWG からフィードバックを受け取り、次の会議 (シカゴ) に向けて標準語の草案を作成する予定でした。複雑なことを書くと、正確に理解するまでに多くの時間がかかるためです (標準語は慎重に踊るため、実際に実装するよりも時間がかかります)。 SFINAE などの実装の詳細について)。提案を提示している間、私は default-init (私はこれをガベージ初期化と呼んでいます) の大ファンではないことを説明しましたが、とにかくそれを行う方法を概説しました。また、提案を書いて以来 (MS 開発者からのフィードバックを受けながら)、array-init のケースについてより多くのことを学んだことも説明しました。興味深いことに、コア言語はブレース初期化リストのシーケンス保証を提供するため、 new X[3]{ f(), g(), h() } はこれらの関数を左から右に呼び出します。関数呼び出しはそれらの保証を取得しません。(私の意見では) 私の最初の提案のように array-init をラップしようとすると、致命的な傷を負います。ユーザー構文がわずかに異なり、実装がさらに複雑になることで、順序付けの保証を実現する賢い方法があり、それについて LWG に説明しました。この時点で、私は本当に array-init を削除したいと考えていました。また、default-init については生ぬるいものでした (指定と実装は簡単ですが、本質的に不要だと考えています)。LWG' 彼らの反応は、配列初期化もデフォルト初期化さえも必要としない、最も単純な形式のみを望んでいたというものでした。私はこれを聞いてとてもうれしかったし、ミーティング自体で (午前 4 時頃に) 必要な標準語を書き上げることができました。それがN3656の由来です。LWG はこれを再検討し、1 つのマイナーな調整 (make_unique<T[N]> の戻り値の型を void から unspecified に変更しました。これは、「確定」する前に私が行いました) で、それを完全な委員会。
次に、議事録で見たように、make_unique の動作が速すぎるのではないかという懸念がありました。N3588 は会議前のメールでオンタイムに送信されていましたが、これが登場したのはこれが初めてでした - ほとんどすべての提案は、最初の出現から正式な動きに移行するのに 1 回以上の会議が必要です (私の最初の提案である透明な演算子ファンクターは、ポートランドで変更なしに表示され、投票されたので、さらに珍しい例外です)。ちなみに、これは完全に妥当な懸念でした。結局、投票は通過しました - メンバーは自分の投票について説明する必要はありませんが、提案が非常に小さいこと、実際の内容に誰も異議を唱えていないこと、および実装が利用可能であることの組み合わせであると私は感じました.
ここで、make_shared についてもう一度考えなければなりません。