統一された関数宣言構文を使えば、戻り値の型を後置できるので 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