std :: result_of на полиморфных функторах

Я пытаюсь использовать 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;
}

0

Решение

Как отметил Петр Скотницкий в комментариях, приведенный выше код работает после изменения my_passthrough для получения константы A& вместо А&:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]