C++1y - 多相ラムダの提案

2012/09で公開されたpaperあたりから、C++1yに向けての大きめな提案が提出され始めました。今回は多相ラムダを見ていきます。


実装コストが高いという理由でC++11では見送られ、あまり議論もされなかった多相ラムダ(polymorphic lambda)ですが、C++1yでは正式に提案されています。現在考えられている構文はこんな感じです:

[](const& x, & y) { return x + y; }

つまり、本来型を記述するところをautoやその他特別なキーワードを用いずに単に書かない、というものです。


このラムダは、以下のような関数オブジェクトを生成します。

struct anonymous
{
    template <typename T, typename U>
    auto operator()(T const& x, U& y) const -> decltype(x+y)
    { return x + y; }
};

関数呼び出し演算子がテンプレートになっているのが特徴です。


また、optionalにテンプレートも書けるようにしたいようです。

[]<int N, class T>(Stack<std::vector, T, N>& a, b) {}


このラムダをauto以外の方法で変数に持つことについては、まだ提案されていないようです。


参照:
N3418 Proposal for Generic (Polymorphic) Lambda Expressions