Что касается стандарта С++:
- Использует ли
std::functionколлекцию компиляторов GNU использовать тип данныхunionдля перевода между различными типами указателей функций (например, для преобразования нестатического указателя функции-члена в указатель функции нечлена)?Я думаю, что это так.EDIT: он использует тип данныхunion, но никакого приведения не производится (стирание стилей). - Можно ли отличать
undefined behaviorмежду различными типами указателей функций (в С++ или С++ 11 Standard)? Я так думаю. - Возможно ли реализовать
std::functionбез использования какого-либо кода сundefined behavior?Я так не думаю.Я говорю об этом.
Следующий вопрос:
Мы иногда должны писать код с undefined behavior в соответствии со стандартом С++ (но у них есть defined behavior для определенных компиляторов С++, таких как GCC или MSVC)?
Означает ли это, что мы не можем/не должны предотвращать undefined behavior наших кодов С++?