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

时间:2014-03-24 14:37:52

标签: c++ c++11 bind clang++ result-of

以下代码使用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 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 ang g ++。

1 个答案:

答案 0 :(得分:1)

result_of在decltype之前,你应该简化这样的语法:

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