Виртуальная функция-член используется, если она не является чистой?

C++03 3.2.2 ... Объект или не перегруженная функция используется, если ее имя появляется в потенциально оцененном выражении. Виртуальная функция-член используется, если она не является чистой ...

А потом в3.2.3 у нас есть:Каждая программа должна содержать ровно одно определение каждой не встроенной функции или объекта, которая используется в этой программе; Диагностика не требуется. Определение может явным образом появиться в программе, оно может быть найдено в стандартной или пользовательской библиотеке или (при необходимости) неявно определено (см. 12.1, 12.4 и 12.8). Встроенная функция должна быть определена в каждой единице перевода, в которой она используется.

Вдоль строк я читаю: чисто виртуальная функция не используется. ODR применяется только к тем функциям, которые используются. Не означает ли это, что следующее будет законным? Я предполагаю, что ответ - нет, это не так, но тогда я не могу понять, почему.

//x.h
struct A
{
   virtual void f() = 0;
};

//y.cpp
#include "x.h"
void A::f()
{
}

//z.cpp
#include "x.h"
#include <iostream>
void A::f()
{
   std::cout << "Hello" << std::endl;
}

//main.cpp
#include "x.h"
struct B:A
{
   virtual void f()
   {
      A::f();
   }
};

int main()
{
   A* p = new B;
   p->f();
}

Ответы на вопрос(1)

Ваш ответ на вопрос