TL DR
foo D. foo - X Y. - , .
:
class X {};
class Y {};
template<typename T>
class C {
public:
virtual T * foo() = 0;
};
class A : public C<X> {
public:
};
class D : public A, public C<Y> {
public:
Y * foo() {};
};
, D foo A C<Y>. , , , D d; d.A::foo();.
, foo D:
Y * foo() {};
D X * foo(), A, Y * foo(). , , Y X. , foo , .
clang:
error: 'foo' , ( "Y *" "X * ')
virtual Y * foo() {};
- , !