Начиная с версии 10.4 Абстрактные классы параграф 6 Стандарта:
«Функции-члены могут быть вызваны из конструктора (или деструктора) абстрактного класса; эффект виртуального вызова чистой виртуальной функции прямо или косвенно для создаваемого (или уничтожаемого) объекта из такого конструктора (или деструктора) не определен »
. Предполагая, что вызов не чистой виртуальной функции из конструктора (или деструктора), разрешено Стандартом, почему разница?
[EDIT] Дополнительные цитаты из стандартов о чистых виртуальных функциях:
§ 10.4 / 2 Виртуальная функция указывается в чистом виде с помощью спецификатора чистоты (9.2) в объявлении функции в определении класса. Чистая виртуальная функция должна быть определена только в том случае, если вызывается с помощью или, как если бы с (12.4), синтаксис квалифицированного идентификатора (5.1). ... [Примечание: объявление функции не может содержать одновременно спецификатор pure и определение - конец примечания]
§ 12.4 / 9 Деструктор может быть объявлен виртуальным (10.3) или чистым виртуальный (10.4); если в программе создаются какие-либо объекты этого класса или любого производного класса, деструктор должен быть определен.
Вот некоторые вопросы, на которые необходимо ответить:
Если чистой виртуальной функции не была предоставлена реализация, не должна ли это быть ошибка компилятора или компоновщика?
Если чистой виртуальной функции была предоставлена реализация, почему в этом случае нельзя четко определить вызов этой функции?