C ++ 14標準のどこで、非constexpr関数をconstexpr関数の定義で使用できないと書かれていますか?

アイロサ

たとえば、以下のコードincr()は、宣言されていない限りコンパイルされませんconstexpr

int incr(int& n) {
    return ++n;
}

constexpr int foo() {
    int n = 0;
    incr(n);
    return n;
}

C ++ 14の§7.1.5/ 3を見ると、次のようになっています。

constexpr関数の定義は、次の制約を満たす必要があります。
(3.1)—仮想ではない(10.3)。
(3.2)—その戻り値の型はリテラル型でなければなりません。
(3.3)—そのパラメータタイプのそれぞれはリテラルタイプでなければなりません。
(3.4)—その関数本体は=削除、=デフォルト、またはを含まない複合ステートメントでなければなりません

(3.4.1)— asm-definition、
(3.4.2)— gotoステートメント、
(3.4.3)— try-block、または
(3.4.4)—非リテラル型の変数の定義または静的またはスレッドの保存期間、または初期化が実行されない期間。

バリー

2段落後、[dcl.constexpr] / 5:

非テンプレート、非デフォルトconstexpr関数、または非テンプレート、非デフォルト、非継承のconstexprコンストラクターの場合、関数またはコンストラクターの呼び出しがコア定数式の評価された部分式になるような引数値が存在しない場合(5.20)、またはコンストラクターの場合は、あるオブジェクト(3.6.2)の定数初期化子の場合、プログラムの形式が正しくありません。診断は必要ありません。

foo()ためにコア定数式になる可能性のある引数が存在しないincr()ため、プログラムの形式が正しくありません(NDR)。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

C ++標準のどこで、const組み込み型変数の定義を初期化する必要があると書かれていますか?

分類Dev

C ++コンパイラで関数をconstexprとして宣言できるのはなぜですか?constexprにすることはできません。

分類Dev

標準(C ++ 14)のどこで、次の2つの宣言が同等であると書かれていますか?

分類Dev

C ++ 11-constexpr関数を使用してconstexprリテラルを定義できませんか?

分類Dev

C ++のconstexpr関数の引数にstatic_assertを使用するにはどうすればよいですか?

分類Dev

C ++で定義されているbegin()関数とend()関数はどこにありますか?

分類Dev

C ++標準ライブラリがcmath関数のconstexprバージョンを提供しないのはなぜですか?

分類Dev

Cで1つの引数を使用して定義されているのに、引数なしで関数を呼び出すことができるのはなぜですか?

分類Dev

標準ライブラリで定義されている文字列式を評価できるC関数はありますか?

分類Dev

set_c0_status()関数はどこで定義されていますか?

分類Dev

`void`"オブジェクト "の非定義宣言:C ++標準のどの部分がそれらを禁止していますか?それともそうですか?

分類Dev

C標準ライブラリの関数をC ++で使用できますか?

分類Dev

C ++は、関数の引数として使用すると、変数がconstexprであることを「忘れる」

分類Dev

関数定義(C)でどのような間違いを犯していますか

分類Dev

Cで名前のない関数を使用できますか?

分類Dev

nanosleep()の関数はC ++ 14で削除されていますか?

分類Dev

cで他の関数を割り当てることができる関数ポインタである変数を定義するにはどうすればよいですか?

分類Dev

constexpr関数でC文字列を返す:なぜコンパイラからの警告がないのですか?

分類Dev

C で書かれた関数が **kwargs 引数を持つことができないというのは本当ですか?

分類Dev

このconstexpr仮想関数手法はC ++ 11 / C ++ 14ルールに違反していますか?

分類Dev

C ++標準のどこで、修飾されていない* mem-initializer-id *のルックアップが定義されていますか?

分類Dev

C ++:関数宣言が別の関数内で許可されているのに、関数定義は許可されていないのはなぜですか?

分類Dev

C標準の可変個引数関数はどこに記述されていますか?

分類Dev

Cで、べき関数が1/2に設定されているときに、べき関数が1を返すのはなぜですか?

分類Dev

このC ++関数定義の構文を説明できますか?

分類Dev

C ++:中括弧付きの関数呼び出し式-init-list-標準では、単一要素リストの些細なケースで中括弧を無視するように規定されていますか?

分類Dev

別のCPPファイルで、関数を定義するだけで別の関数を使用するにはどうすればよいですか?C ++

分類Dev

C ++ 11以降の関数宣言で構造体を定義できないのはなぜですか?

分類Dev

C11標準が安全でないstrcat()、strcpy()関数を削除しないのはなぜですか?

Related 関連記事

  1. 1

    C ++標準のどこで、const組み込み型変数の定義を初期化する必要があると書かれていますか?

  2. 2

    C ++コンパイラで関数をconstexprとして宣言できるのはなぜですか?constexprにすることはできません。

  3. 3

    標準(C ++ 14)のどこで、次の2つの宣言が同等であると書かれていますか?

  4. 4

    C ++ 11-constexpr関数を使用してconstexprリテラルを定義できませんか?

  5. 5

    C ++のconstexpr関数の引数にstatic_assertを使用するにはどうすればよいですか?

  6. 6

    C ++で定義されているbegin()関数とend()関数はどこにありますか?

  7. 7

    C ++標準ライブラリがcmath関数のconstexprバージョンを提供しないのはなぜですか?

  8. 8

    Cで1つの引数を使用して定義されているのに、引数なしで関数を呼び出すことができるのはなぜですか?

  9. 9

    標準ライブラリで定義されている文字列式を評価できるC関数はありますか?

  10. 10

    set_c0_status()関数はどこで定義されていますか?

  11. 11

    `void`"オブジェクト "の非定義宣言:C ++標準のどの部分がそれらを禁止していますか?それともそうですか?

  12. 12

    C標準ライブラリの関数をC ++で使用できますか?

  13. 13

    C ++は、関数の引数として使用すると、変数がconstexprであることを「忘れる」

  14. 14

    関数定義(C)でどのような間違いを犯していますか

  15. 15

    Cで名前のない関数を使用できますか?

  16. 16

    nanosleep()の関数はC ++ 14で削除されていますか?

  17. 17

    cで他の関数を割り当てることができる関数ポインタである変数を定義するにはどうすればよいですか?

  18. 18

    constexpr関数でC文字列を返す:なぜコンパイラからの警告がないのですか?

  19. 19

    C で書かれた関数が **kwargs 引数を持つことができないというのは本当ですか?

  20. 20

    このconstexpr仮想関数手法はC ++ 11 / C ++ 14ルールに違反していますか?

  21. 21

    C ++標準のどこで、修飾されていない* mem-initializer-id *のルックアップが定義されていますか?

  22. 22

    C ++:関数宣言が別の関数内で許可されているのに、関数定義は許可されていないのはなぜですか?

  23. 23

    C標準の可変個引数関数はどこに記述されていますか?

  24. 24

    Cで、べき関数が1/2に設定されているときに、べき関数が1を返すのはなぜですか?

  25. 25

    このC ++関数定義の構文を説明できますか?

  26. 26

    C ++:中括弧付きの関数呼び出し式-init-list-標準では、単一要素リストの些細なケースで中括弧を無視するように規定されていますか?

  27. 27

    別のCPPファイルで、関数を定義するだけで別の関数を使用するにはどうすればよいですか?C ++

  28. 28

    C ++ 11以降の関数宣言で構造体を定義できないのはなぜですか?

  29. 29

    C11標準が安全でないstrcat()、strcpy()関数を削除しないのはなぜですか?

ホットタグ

アーカイブ