パンドラボックスを開くのが好きですが、それは私の気になることを止めるものではありません。簡単な例を考えてみましょう:テンプレートパラメータの中でconstexprラムダを宣言できますか?
#include <type_traits>
template <auto>
struct Foo: std::false_type { };
template <>
struct Foo<[](){return 1;}()>:std::true_type { };
int main() {
static_assert(Foo<1>::value);
}
私はラムダが未評価のコンテキスト内で宣言することはできません知っているが、明らかにこれは、ここではそうではありません。もっと奇妙なクラン5.0.0(これは、最初は部分的にconstexprラムダをサポートしていると思います)does compile itです。
これはコンパイラのバグですか、これはC++ 17で許可されていますか?
私は標準的な委員会の意図がそれを提示することだと思った、それは私が驚いたのは、コンパイルコードを驚いた理由です。私はちょっと待ってからあなたの答えを受け入れます。ありがとう! –
*なぜ*これが違法になったのか?非常に便利で、メタプログラミングをもっと簡単にしているようです... –
@DanielJourいいえ、ごめんなさい。しかしそれはメタプログラミングをもっと*混乱させるでしょう:) – Rakete1111