>>356
template <typename A, typename B> auto add(A a, B b) { return decltype(a+b); }
って書ければいいんじゃない?
returnが複数あればそれぞれdecltypeって書く。
template <typename A, typename B> auto add(A a, B b) { if(pred)return decltype(a+b);else return decltype(NULL); }
複数にdecltypeに矛盾がなければ戻り値の型が決まり、矛盾があればエラー、とか。