0

我正在尝试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;
}
4

1 回答 1

1

正如 Piotr Skotnicki 在评论中指出的那样,一旦将 my_passthrough 更改为采用 const A& 而不是 A&,上面的代码就可以工作:

   struct my_passthrough {
       template<typename A>
       A operator()(const A &value) const {
           return value;
       }
   };
于 2016-01-11T17:59:31.687 回答