2016-11-04 16 views
2

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0088r3.htmlに拡張する必要があります。std::variant<int, const int>に展開する必要があり、それを許可するための投票がありますが、私は見つけることができません実際の根拠なぜstd :: variantはC言語でstd :: variant <int、const int>

なぜ、std::variant<int, const int>を許可するのが理にかなっていますか?

+2

リンクを読んでみませんか?それは理論的にうまく説明します。これは、導入の第1行で実際に説明されています。 –

+2

申し訳ありません@EliSadoff、導入の最初の行に「C++ 17型セーフティユニオンが必要です」と表示されます。 –

+0

C++は現在、型安全な共用体を持たず、 'int'' const int'共用体を許可するので、型保証型の共用体ができます。これは、安全でない型の例外を減らすのに役立ちます。提案に含まれるコードは、なぜこれが必要なのかの例です。 –

答えて

1

このペーパーの以前のバージョンに存在した理論的根拠および議論のセクションは、P0086 - Variant design reviewに分かれています。

関連段落は言う:

variant<int, const int>variantconstタイプを処理することができます彼ら だけvariant建設とemplace()を介して設定することができます。 constと非constの両方のタイプが選択肢である場合、アクティブな 代替は、通常のコンストラクタインスタンシエーション/オーバーロード ルールによって選択されます。

ので、根拠の観点から、代替案の項を見我々はそれを言うことができます代替タイプの

  • 少ない要件があり、容易にそれはテンプレートコードでvariantを使用することです。 (そうでなければ、variantをインスタンス化する前に、テンプレートコードが型のリストを通過し、cv修飾子を削除し、重複を排除するなど)。
  • 一般的にcv修飾型を許可し、特に異なるcv-qualificationsは、型の性質から自然に流れるセマンティクスで実装できます。
関連する問題