Конфликт имен: аргумента шаблона и у унаследованное
От: MescalitoPeyot Украина  
Дата: 12.11.10 05:54
Оценка:
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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.