66
struct Test
{
  static const int value = []() -> int { return 0; } ();
};

gcc-4.6 では、error: function needs to be constexpr. constexprいろいろな場所にパッティングの組み合わせを試してみましたが、うまくいきませんでした。

constexprラムダ関数もサポートされていますか (タイプが指定されているかどうかに関係なくreturn) ? 正しい構文は何ですか?

回避策はありますか?

4

4 に答える 4

27

C++0x FDIS §7.1.5[dcl.constexpr]/1 から:

指定子は、変数のconstexpr定義、関数または関数テンプレートの宣言、またはリテラル型の静的データ メンバーの宣言にのみ適用されます。

ラムダ式はそれらのいずれでもないため、宣言することはできませんconstexpr

于 2011-06-21T03:48:29.993 に答える
14

C++17 より前のラムダは と互換性がありませんconstexpr定数式内では使用できません。

C++17ラムダから始めてconstexpr、それが理にかなっています。提案N4487は、C++17 標準に組み込まれます。ISO C++ 委員会の議長である Herb Sutter 氏は、自身の Web サイトで次のように述べています

constexpr 関数内でラムダが使用できるようになりました。

于 2016-08-09T10:35:20.203 に答える