C++0x 戻り値の型を前置して decltype でパラメータを計算

統一された関数宣言構文を使えば、戻り値の型を後置できるので decltype でパラメータを計算できる

template <class T, class U>
[]add(T t, U u) -> decltype(t + u)
{
    return t + u;
}


これを、従来通りに戻り値を前置すると decltype でパラメータを計算することはできない

template <class T, class U>
decltype(t + u) add(T t, U u) // エラー!
{
    return t + u;
}


だが、戻り値の型を前置してもパラメータの型は前に書くことができるのでこう書ける

template <class T, class U>
decltype((*(T*)0) + (*(U*)0)) add(T t, U u)
{
    return t + u;
}


んー、素直に後置することをオススメします


N2582 - Unified Function Syntax

C++0x言語拡張まとめ