【发布时间】:2014-04-16 16:32:12
【问题描述】:
编辑:我现在觉得有点傻。发布的代码实际上适用于 ???=decltype(acc(base(i)))... 错误是别的东西 - 虽然非常令人困惑。我会就此发布a new question。感谢您的帮助。
我有一些这样的代码:
template<typename Base, typename Acc>
struct Foo
{
Base base;
Acc acc;
auto operator()(unsigned i) const -> decltype(???) // what is ???
{ return acc(base(i)); }
};
如何获得正确的返回类型?
我尝试使用 decltype(acc(base(i))) 但这会产生错误(使用 GCC 4.6.3):
“base”没有依赖于模板参数的参数, 所以必须有一个“base”声明
【问题讨论】:
-
作为一种变通方法,请尝试
decltype(acc(this->base(i)))甚至decltype(this->acc(this->base(i)))。 -
尝试更新的 GCC。我在 Ubuntu 中使用 GCC 4.8.1 进行了尝试——它有效
-
我相信
decltype(acc(base(i)))是正确的(除非问题出在您未显示的某些代码中)但 gcc 4.6.3 太旧而无法正确实现(它适用于 gcc 4.8. 1)。尝试更新您的编译器或 Daniel Frey 给出的解决方法。 -
您可以尝试“完全限定” ???用 Foo
::... 看看它是否欣赏从头开始的方法 -
@DanielFrey 虽然这种解决方法对于 gcc 来说是可以的,但大多数时候它对 clang 来说是有问题的。我一直对此感到困扰,我通常会找到一些完全不同的解决方案,没有任何
decltype。
标签: c++ templates c++11 decltype