auto + decltype

用于标注函数返回值

令人意外的是:C++14 加入的返回值推导是一种特殊的类型,和前向声明并不兼容。

int known();
auto known() { return 42; } // 错误:类型不兼容
// int known() { return 42; }         // ok
// auto known() -> int { return 42; } // ok

同样:

auto known();
int known() { return 42; } // 错误:类型不兼容
// auto known() { return 42; } // ok

C++ 14 还加入了 decltype(auto),这个组合不像单独的 auto,不能被 const 等继续修饰。