Как описано in another message of mine, невозможно сравнить 2 указателя с функциями-членами с «<» (менее). По крайней мере, это приводит к неопределенному поведению.Указатели функций и методов в std :: set
Я только что удалось скомпилировать этот код как с помощью Visual C++, а также GCC:
template <class Receiver, class Param = void*, class Return = void>
class EventReceiver : public IFunction<> {
protected:
std::set< Return(Receiver::*)(Param) > test;
std::set< Return(*)(Param) > test2;
...
AFAIK, чтобы сделать зЬй :: карту или зЬй :: набор ничего, оно должно быть возможным сравните значения набора с «<». Означает ли это, что вышеупомянутые контейнеры или фактические компиляторы имеют рабочую реализацию сравнения методов указателей на методы таким образом?
Мой ответ был неправильным - указатели на элемент и указатели не совпадают. Мои извинения! – templatetypedef
@templatetypedef FWIW соответствующая формулировка в C++ 11 приведена в § 20.8.5/8. Это неудивительно. Я пригласил некоторых (компиляторов) друзей, чтобы сказать здесь – sehe
@Xeo дала идею [в чате] (http://chat.stackoverflow.com/transcript/message/2582471#2582471) – sehe