lambda expression でスコープ内の constexpr を参照する
こんな事が許されるんですね…。
[ソース]
template<typename T> void static_assert_(T){ static_assert(T()(), ""); } int main(){ constexpr int num = 10; auto x = []{ struct X{ constexpr int operator ()() const{ return num; } }; return X{}; }(); static_assert(decltype(x){}() == 10, ""); static_assert(decltype(x){}() != 42, ""); static_assert_(x); constexpr int value = 3; auto plus_value = []{ struct X{ constexpr int operator ()(int n) const{ return value + n; } }; return X{}; }(); static_assert(decltype(plus_value){}(4) == 7, ""); static_assert(decltype(plus_value){}(2) == 5, ""); return 0; }
これはなにか悪さが出来そうな気がするゾ!