Std::bind上的Std::result_of不能在clang++ 3.4上编译



下面的代码使用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);
}

c++ -4.8 -std=c++0x test. cpp# OK

clang++ -std=c++0x test.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和g++上编译。

result_of在decltype之前,您应该像这样简化语法:

auto g(A a) -> decltype( std::declval<A>()( std::bind(f, a) ) )

相关内容

  • 没有找到相关文章

最新更新