Я получаю другую, более разумную ошибку (с g ++ 4.3.3):
tst.cpp: In function ‘int main()’:
tst.cpp:49: error: reference to ‘instance’ is ambiguous
tst.cpp:22: error: candidates are: static T* TA<T>::instance() [with T = B]
tst.cpp:22: error: static T* TA<T>::instance() [with T = C]
Это можно исправить, явно указав, какую версию instance
следует использовать в C
:
class C : public TA<C>, private B
{
public:
using TA<C>::instance;
void Func() { cout << "C" << endl; }
};