Это было в длинном списке вещей для C ++ 0x. Вот почему они создали этот формат определения нечетной функции:
auto FuncName(Type1 param1, Type2 param2) -> ReturnType {...}
Это, в сочетании с decltype, позволяет делать такие вещи:
auto FuncName(Type1 param1, Type2 param2) -> decltype(param1 + param2) {...}
Это означает, что тип возвращаемого значения будет тем, что вы получите при вызове оператора + (Тип1, Тип2).
Обратите внимание, что C ++ является статически типизированным языком. Вы не можете делать вычисления типа во время выполнения. Это должно быть сделано во время компиляции с помощью механизмов, подобных этому, или какой-либо формы метапрограммирования шаблонов.