If you have something like this:
#include
template class A
{
public:
void func()
{
T::func();
}
};
c
Seems you just had to add a little trace and usage to answer your own question...
#include
template struct A {
void func() {
T::func();
}
};
struct B1 : A {
virtual void func() {
std::cout << "virtual void B1::func();\n";
}
};
struct B2 : A {
void func() {
std::cout << "void B2::func();\n";
}
};
struct C1 : B1 { };
struct C2 : B2 { };
struct C1a : B1 {
virtual void func() {
std::cout << "virtual void C1a::func();\n";
}
};
struct C2a : B2 {
virtual void func() {
std::cout << "virtual void C2a::func();\n";
}
};
int main()
{
C1 c1;
c1.func();
C2 c2;
c2.func();
B1* p_B1 = new C1a;
p_B1->func();
B2* p_B2 = new C2a;
p_B2->func();
}
Output:
virtual void B1::func();
void B2::func();
virtual void C1a::func();
void B2::func();
Conclusion: A does take on the virtual-ness of B's func.