以下代码使用 g++-4.8 编译,但在使用 clang 3.4 时不编译。
#include <type_traits>
#include <functional>
struct A {
template <typename Continuation>
bool operator()(
//const Continuation & continuation
Continuation continuation
) const {
return true;
}
};
bool f(A) {
return true;
}
auto g(A a) ->
typename std::result_of<A(
decltype(std::bind(f, a)))>::type
{
auto continuation = std::bind(f, a);
return a(continuation);
}
int main(int argc, char ** argv) {
A a;
g(a);
}
g++-4.8 -std=c++0x test.cpp # OK
clang++ -std=c++0x 测试.cpp
test.cpp:22:38: error: no type named 'type' in 'std::result_of<A (std::_Bind<bool (*(A))(A)>)>'
decltype(std::bind(f, a)))>::type
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
1 error generated.
当您取消注释注释行并注释以下行时,代码会在 clang ang g++ 上编译。
最佳答案
result_of 在 decltype 之前,你应该像这样简化语法:
auto g(A a) -> decltype( std::declval<A>()( std::bind(f, a) ) )
关于c++ - std::result_of on std::bind 不能在 clang++ 3.4 上编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612466/