decltypedされた変数の初期化子でdecltypeを使用することは許可されていますか?

maximum_prime_is_463035818

この質問をきっかけに、これが許可されているかどうか疑問に思いました。

template <typename T>
T foo(){return T{};}

struct bar {};

int main()
{

    bar a = foo<decltype(a)>();
}

私が試したコンパイラは文句なしにそれを取りましたが、これが本当に合法であるかどうか、または落とし穴がないかどうかはわかりません(そしてa宣言中にのタイプを使用するのは奇妙に見えます)。

背景:リンクされた質問で、OPautoはタイプ(ここではbarSomeComplexTypeAndNotAutoその質問では)を同時に2回回避してスペルアウトしたいので、(未使用の)パラメーターを使用してを推測しTます。単に型を推測するためにパラメータを誤用するのは好きではなかったので、私の最初のアイデアはでしたdecltype

StoryTeller-Unslander Monica

コーシャ大丈夫です。

[basic.scope.pdecl]

1名前の宣言のポイントは、以下に記載されている場合を除き、完全な宣言子([dcl.decl])の直後で、初期化子(存在する場合)の前です。[例:

unsigned char x = 12;
{ unsigned char x = x; }

ここでは、初期化子がその存続期間([basic.life])の外で2番目のxにアクセスするため、2番目のxの初期化の動作は未定義です。—終了例]

そのためa、その時点で宣言されているため、独自の初期化子で使用できます唯一の問題はどのようにするかです。decltypeスコープ内の任意の変数に名前を付けるid式に適用できます。また、の式decltype は未評価のオペランドであるため、UBはありません。変数のタイプのみが調べられ、不確定な値は調べられません。

しかし、味の説明はありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ClangがC ++で指定された初期化子を許可することにしたのはなぜですか?

分類Dev

cv-qualifiersはdecltype(auto)変数で許可されていますか?

分類Dev

OperatorNotAllowedInGraphError:Pythonの `bool`として` tf.Tensor`を使用することは許可されていません:AutoGraphはこの関数を変換しました

分類Dev

Cが初期化されていないローカル変数を許可するのはなぜですか?

分類Dev

「怠惰な」初期化子でCoroutineを中断することは可能ですか?「AndroidメインルーパースレッドではrunBlockingは許可されていません」というエラーが表示されます

分類Dev

実装が非ローカル変数の動的初期化を静的初期化として扱うことが許可されていることを理解するにはどうすればよいですか?

分類Dev

U-SQL特定の列の重複を削除するために複数のFIRST_VALUEを使用することは許可されていますか?

分類Dev

Typescript:複数のファイル間で変数を複製することは許可されていますか?

分類Dev

配列初期化子は、ここでは許可されていません

分類Dev

これを削除することは許可されていますか?

分類Dev

コンストラクターで小道具を変更することは「許可されていますか」?

分類Dev

.NETでの不変のリスト:なぜあなたは項目を追加および削除することが許可されていますか?

分類Dev

必要な初期化子と指定された初期化子の違いは何ですか?

分類Dev

指定された初期化子を便利な初期化子でオーバーライドすることは可能ですか?

分類Dev

「埋め込まれた」変数またはオブジェクトを取得するためのゲッターの使用は許可されていますか?

分類Dev

指定された初期化子は、C99で初期化する変数を合法的に参照できますか?

分類Dev

`new`のないコレクション初期化子がオブジェクト初期化子の内部では許可されているが外部では許可されていないのはなぜですか?

分類Dev

XSDで同じ名前の複数の要素を持つことは許可されていますか?

分類Dev

変数宣言の合間に変数を初期化することは禁止されていますか?

分類Dev

未定義の関数のアドレスを取ることは許可されていますか?

分類Dev

Chrome拡張機能でwindow.postMessage()を使用することは許可されていますか?

分類Dev

initメソッド内でメソッドを使用することは許可されていますか?

分類Dev

stdinに「w +」モードでfreopenを使用することは許可されていますか?

分類Dev

__builtin_add_overflowでエイリアシングを使用することは許可されていますか?

分類Dev

ビデオクリップで Google API を使用することは許可されていますか?

分類Dev

推論されていないコンテキストで基本クラス定義を使用することが許可されていないのはなぜですか、またこれを回避する方法は?

分類Dev

ベクトルから別の変数に整数値を割り当てることがRustで許可されているのはなぜですか?

分類Dev

指定された初期化子は、プロトコルを使用する場合、「super」で指定された初期化子のみを呼び出す必要がありますか?

分類Dev

pgQueryFileを複数回再利用することは許可されていますか

Related 関連記事

  1. 1

    ClangがC ++で指定された初期化子を許可することにしたのはなぜですか?

  2. 2

    cv-qualifiersはdecltype(auto)変数で許可されていますか?

  3. 3

    OperatorNotAllowedInGraphError:Pythonの `bool`として` tf.Tensor`を使用することは許可されていません:AutoGraphはこの関数を変換しました

  4. 4

    Cが初期化されていないローカル変数を許可するのはなぜですか?

  5. 5

    「怠惰な」初期化子でCoroutineを中断することは可能ですか?「AndroidメインルーパースレッドではrunBlockingは許可されていません」というエラーが表示されます

  6. 6

    実装が非ローカル変数の動的初期化を静的初期化として扱うことが許可されていることを理解するにはどうすればよいですか?

  7. 7

    U-SQL特定の列の重複を削除するために複数のFIRST_VALUEを使用することは許可されていますか?

  8. 8

    Typescript:複数のファイル間で変数を複製することは許可されていますか?

  9. 9

    配列初期化子は、ここでは許可されていません

  10. 10

    これを削除することは許可されていますか?

  11. 11

    コンストラクターで小道具を変更することは「許可されていますか」?

  12. 12

    .NETでの不変のリスト:なぜあなたは項目を追加および削除することが許可されていますか?

  13. 13

    必要な初期化子と指定された初期化子の違いは何ですか?

  14. 14

    指定された初期化子を便利な初期化子でオーバーライドすることは可能ですか?

  15. 15

    「埋め込まれた」変数またはオブジェクトを取得するためのゲッターの使用は許可されていますか?

  16. 16

    指定された初期化子は、C99で初期化する変数を合法的に参照できますか?

  17. 17

    `new`のないコレクション初期化子がオブジェクト初期化子の内部では許可されているが外部では許可されていないのはなぜですか?

  18. 18

    XSDで同じ名前の複数の要素を持つことは許可されていますか?

  19. 19

    変数宣言の合間に変数を初期化することは禁止されていますか?

  20. 20

    未定義の関数のアドレスを取ることは許可されていますか?

  21. 21

    Chrome拡張機能でwindow.postMessage()を使用することは許可されていますか?

  22. 22

    initメソッド内でメソッドを使用することは許可されていますか?

  23. 23

    stdinに「w +」モードでfreopenを使用することは許可されていますか?

  24. 24

    __builtin_add_overflowでエイリアシングを使用することは許可されていますか?

  25. 25

    ビデオクリップで Google API を使用することは許可されていますか?

  26. 26

    推論されていないコンテキストで基本クラス定義を使用することが許可されていないのはなぜですか、またこれを回避する方法は?

  27. 27

    ベクトルから別の変数に整数値を割り当てることがRustで許可されているのはなぜですか?

  28. 28

    指定された初期化子は、プロトコルを使用する場合、「super」で指定された初期化子のみを呼び出す必要がありますか?

  29. 29

    pgQueryFileを複数回再利用することは許可されていますか

ホットタグ

アーカイブ