Я верю все три в безопасности, хотя я не могу цитировать в них главы и стихи из стандарта.:)
Тем не менее, я столкнулся с одной очень конкретной ошибкой в указателях на функции-члены в более старой версии Visual Studio (боюсь, я не помню, какая именно).В частности, у меня была такая структура:
struct optable_entry {
const char *name;
void (*MyClass::run)();
};
const optable_entry operations[] = {
{ "foo", &MyClass::foo },
/* ... */
};
По этой причине значения функции-члена не будут правильно инициализированы.В моем случае это был сгенерированный код, так что вместо него было не так уж и сложно заменить его на массивный оператор switch, но это то, что нужно остерегаться - указатели на функции-члены используются достаточно редко, что может привести к странным угловым случаям, подобным этому.скрывается в вашем компиляторе.