在某些时候,函数的返回类型取决于某个表达式对实参的处理。然而对于类似如下代码:
template <typename T1, typename T2>
decltype( x + y ) add( T1 x, T2 y);
这样的定义在C++11之前是不能实现的,因为返回式所使用的对象未被引用,或未在作用域内。
但是在C++11中,你可以将一个函数的返回类型声明在参数之后:
template <typename T1, typename T2>
add( T1 x, T2 y) -> decltype( x + y ) ;
这种写法所采用的语法,与为 lambda 声明返回类型 是一致的。