Если у вас падает код, значит у вас ошибка.
Компилятор всегда прав.
НО! Верить нельзя никому. Особенно MSVC компилятору.
GCC работает не поперхнувшись.
Указатель
typedef void (PolicyChecker::*FramePolicyFunction)(PolicyAction);
При forward декларации класса считает метод не виртуальным.
При явной декларации - правильно разрешает в виртуальный вызов.
Линкер не дает ошибки (предупреждений не видел тоже). Результат - вынос мозга.
Ассемблер выглядит как попытка вызвать _fastcall, при том что сама функция _stdcall.
Пойду повешусь.
Компилятор всегда прав.
НО! Верить нельзя никому. Особенно MSVC компилятору.
GCC работает не поперхнувшись.
Указатель
typedef void (PolicyChecker::*FramePolicyFunction)(PolicyAction);
При forward декларации класса считает метод не виртуальным.
При явной декларации - правильно разрешает в виртуальный вызов.
Линкер не дает ошибки (предупреждений не видел тоже). Результат - вынос мозга.
Ассемблер выглядит как попытка вызвать _fastcall, при том что сама функция _stdcall.
Пойду повешусь.