Суть в следующем, имеется класс производный от нескольких шаблонных классов
template <class Tag>
struct ID
{
int id;
};
struct Test : ID<void>, ID<int>
{
};
так же есть функция
template <class Tag>
int get_id(const ID<Tag> &id)
{
return id.id;
}
вопреки моим ожиданиям компилятор (VC2008) спокойно переваривает передачу обьекта Test в get_id без явной специализации шаблона.
при это выбирается первый ID<void> в цепочке наследования.
Test t;
get_id(t); // вызывается get_id<void>
это баг или фича? мне казалось что в случае множественного наследования компилятор выдаст ошибку и предложит спциализировать get_id явно. т.е get_id<int> или get_id<void>