If you can read assembly, it is undeniable proof:
Code:
pD->foo();
00415020 lea ecx,[ebp-24h]
00415023 call CMemoryManagerBase<D>::operator-> (4132B7h)
00415028 mov dword ptr [ebp-140h],eax
0041502E mov eax,dword ptr [ebp-140h]
00415034 mov edx,dword ptr [eax]
00415036 mov esi,esp
00415038 mov ecx,dword ptr [ebp-140h]
0041503E mov eax,dword ptr [edx]
00415040 call eax
00415042 cmp esi,esp
00415044 call @ILT+1650(__RTC_CheckEsp) (413677h)
pC->foo();
00415049 lea ecx,[ebp-40h]
0041504C call CMemoryManagerBase<C>::operator-> (4138C0h)
00415051 mov dword ptr [ebp-140h],eax
00415057 mov eax,dword ptr [ebp-140h]
0041505D mov edx,dword ptr [eax]
0041505F mov esi,esp
00415061 mov ecx,dword ptr [ebp-140h]
00415067 mov eax,dword ptr [edx]
00415069 call eax
0041506B cmp esi,esp
0041506D call @ILT+1650(__RTC_CheckEsp) (413677h)
pB->foo();
00415072 lea ecx,[ebp-5Ch]
00415075 call CMemoryManagerBase<B>::operator-> (4132EEh)
0041507A mov dword ptr [ebp-140h],eax
00415080 mov eax,dword ptr [ebp-140h]
00415086 mov edx,dword ptr [eax]
00415088 mov esi,esp
0041508A mov ecx,dword ptr [ebp-140h]
00415090 mov eax,dword ptr [edx]
00415092 call eax
00415094 cmp esi,esp
00415096 call @ILT+1650(__RTC_CheckEsp) (413677h)
pA->foo();
0041509B lea ecx,[ebp-78h]
0041509E call CMemoryManagerBase<A>::operator-> (413852h)
004150A3 mov dword ptr [ebp-140h],eax
004150A9 mov eax,dword ptr [ebp-140h]
004150AF mov edx,dword ptr [eax]
004150B1 mov esi,esp
004150B3 mov ecx,dword ptr [ebp-140h]
004150B9 mov eax,dword ptr [edx]
004150BB call eax
004150BD cmp esi,esp
004150BF call @ILT+1650(__RTC_CheckEsp) (413677h)
Code:
ppnew<D> pD;
ppnew<C> pC;
ppnew<B> pB;
ppnew<A> pA;
pD->foo();
pC->foo();
pB->foo();
pA->foo();