C++0x ラムダ式に対する雑感

最新のproposalはこれか?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2413.pdf

<>(引数リスト)(式)
<>(引数リスト)->戻り値の型{ 関数本体 }

とか書けるのか。
『<>』を『<&>』にするとローカル変数にアクセスできるのね。
しかし、『<>』『<&>』が一つのトークンとして扱うようになっているのはどういうことよ?
個人的にはこの文法はありえない。
新しいキーワードを追加しなかったのは、既存のソースがなるべくそのままコンパイルできるようにするためじゃないのか?
『<>』なんて文字並びは既存のソースに頻出するぞ。

『<>』が使われているソースの例↓

template <typename T=int>
class foo;

template <typename T>
ostream& operator<<(ostream&, const foo<T>&);

template <>
class foo<int>
{
  int value;
  public:
  foo(const int& x):value(2*x) {}
  friend ostream& operator<< <>(ostream&, const foo<int>&);
  foo<> bar(int x) {return 2*x*value; }
  template <typename T> foo<> bar(T x) {return x*value; }
};

template <typename T>
ostream& operator<<(ostream& os, const foo<T>& x)
{ return os << x.value; }

int main()
{
  foo<> x(4);
  cout << x.bar<>(3) << endl;
  return 0;
}

このまま、C++0x標準になることはまず無いと思う。
確実に何らかの修正が入るだろう。




どういう形であれ、ラムダ式が追加されるのなら、ローカル関数や、遅延評価とかもついでに追加して欲しい。
ラムダ式が導入されれば、技術的な問題はほとんどないと思うのだが。

特に、遅延評価の導入されれば、短絡評価可能な&&演算子や||演算子のユーザ定義が可能になるはず。