次の例に要約できる実際の状況があります。
template< typename ListenerType >
struct Notifier
{
void add_listener( ListenerType& ){}
};
struct TimeListener{ };
struct SpaceListener{ };
struct A : public Notifier< TimeListener >
, public Notifier< SpaceListener >
{
};
struct B : TimeListener{ };
int main()
{
A a;
B b;
a.add_listener( b ); // why is ambiguous?
return 0;
}
B
がであるTimeListener
ことをコンパイラが認識できないのはなぜNotifier< TimeListener >::add_listener( TimeListener& )
ですか。