多态函子上的std :: result_of

时间:2016-01-11 17:42:20

标签: c++ c++11 result-of polymorphic-functions

我试图在仿函数上使用std::result_of。为什么我会得到这些结果?

#include <typeinfo>

struct my_logical_not {
    template<typename A>
    bool operator()(const A &value) const {
        return !value;
    }
};

struct my_passthrough {
    template<typename A>
    A operator()(A &value) const {
        return value;
    }
};

int main() {


    // this prints 'b':
    std::cout << typeid(typename std::result_of<my_logical_not(int)>::type).name() << std::endl; 

    // this does not compile:
    // main.cpp:24:66: error: ‘type’ in ‘class std::result_of<my_passthrough(int)>’ does not name a type

    std::cout << typeid(typename std::result_of<my_passthrough(int)>::type).name() << std::endl; 

    return 0;
}

1 个答案:

答案 0 :(得分:1)

正如Piotr Skotnicki在评论中指出的那样,上面的代码一旦my_passthrough被改为采用const A&amp;而不是A&amp;:

   struct my_passthrough {
       template<typename A>
       A operator()(const A &value) const {
           return value;
       }
   };