我试图从boost库中实现bind函数。
您可以在下面看到定义为bind_t
的主结构operator()
。
我的问题如下:为什么我们应该在decltype中指定operator()
返回类型的call()
显式为成员函数(如果我在{{1}之前删除this->
},模板参数推导在g ++中失败。)
同样有趣的是,使用clang ++并没有这样的问题。
我不知道,为什么会这样。
call
实施的{p> full source
simple usecase
答案 0 :(得分:2)
这是一个gcc错误,并在错误报告decltype needs explicit 'this' pointer in member function declaration of template class with trailing return type中记录,其中包含:
对模板的成员函数使用trailing return-type时 上课,这个'必须明确提到指针。这应该 没有必要(隐含的'这'适用于非模板 类)。
示例:
template <typename T> struct DecltypeConstThis { T f() const { return T{}; } auto g() -> decltype(this->f()) { return this->f(); } auto h() const -> decltype(f()) { return f(); } // this should work the same as g() above (with implicit 'this') }; struct Working { int f() const { return 0; } auto h() const -> decltype(f()) { return 0; } }; int main() { Working w; w.h(); DecltypeConstThis<int> d; d.g(); d.h(); return 0; }
该报告已标记为已修复,看起来此作品已开始在gcc 5.1中工作( see it live )。