在decltype
http://en.wikipedia.org/wiki/Decltype上的维基百科文章中,我遇到了这个例子:
int& foo(int& i);
float foo(float& f);
template <class T> auto transparent_forwarder(T& t) −> decltype(foo(t)) {
return foo(t);
}
虽然我理解这个函数背后的动机,但我不理解它使用的语法,特别->
是声明中的语法。什么是 -> 以及它是如何解释的?
编辑 1
基于上述:这里有什么问题?
template <typename T1, typename T2>
auto sum(T1 v1, T2 v2) -> decltype(v1 + v2) {
return v1 + v2;
}
错误是:
error: expected type-specifier before ‘decltype’
error: expected initializer before ‘decltype
对编辑 1 的回答:
哎呀!我忘了在 g++ 中使用-std=c++11
编译器选项。
编辑 2
基于以下答案。我有一个相关的问题:看下面的声明:
template <typename T1, typename T2>
decltype(*(T1 *) nullptr + *(T2 *) nullptr) sum2(T1 v1, T2 v2);
它decltype
不需要->
在函数声明中使用。那么为什么我们需要->