struct A { struct B { static void f() { /* VC 9,10 */ } }; static void f() { /* GCC 4.x */ } };
template <class B>
struct D : public B { static void g() { B::f(); } };
int main()
{
D<A>::g();
return 0;
}
Вот-с, столкнулся с такой штукой, при совпадении имени параметра шаблона (здесь это
B) с именем унаследованного локального класса VC выбирает локальный класс, а GCC — параметр. Это более или менее минимальный пример, на практике у меня boost_assert(boost_type_traits(B)) обломался при портировании с gcc (надо же, пригодился всякий пожарный ассерт).
Вопрос классический и по большому счету чисто теоретический: кто виноват и что делать?
Если уже обсуждалось (что наверняка), дайте ссылку, найти не получилось, слишком много мусора по ключевым словам.
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>