C ++ CRTP виртуальная функция точка создания

Я пытаюсь понять, является ли стандартным простой шаблон CRTP.

Код ниже компилируется и работает как положено (на Clang).

Но мое понимание соответствующих стандартных глав / параграфов состоит в том, что точка создания виртуальной функции CRTP <&nbsp;Производный, База>:: DoSomething () должен находиться в точке (B) кода, где полное объявление Derived недоступно. Поэтому внутренний тип typedef также не должен быть доступен.

Может ли кто-нибудь указать на соответствующую стандартную главу, которая подтверждает этот код?

Другими словами, что-то, что говорит о том, что в этом случае виртуальная функция создается ATFER точка C? Заранее большое спасибо за понимание.

Francesco

//-------------------------
// START CODE

#include 

struct Type1 {};
struct Type2 {};

struct Base
{
  virtual ~Base() {}
  virtual void DoSomething() = 0;
};

template< typename T, typename U >
struct CRTP : U
{
  virtual void DoSomething() { DoSomething( typename T::Type() ); }

 void DoSomething( Type1 ) { std::cout < "1\n"; }
 void DoSomething( Type2 ) { std::cout < "2\n"; }
};

// (A) point of inst. of CRTP< Derived, Base > ( 14.7.1.4 ) ??
// (B) point of inst. of CRTP< Derived, Base >::DoSomething() (14.6.4.1.4 ) ??

struct Derived : CRTP< Derived, Base >
{
  typedef Type2 Type;
};

// (C)

int main()
{
  Base *  ptr = new Derived;
  ptr->DoSomething();
  delete ptr;
}

// END CODE
//-------------------------