LINUX.ORG.RU

Баг или фича G++?


0

0

class F { public: template<class T> void foo(){}; };

template<class T, class Q> class B { T t; public: virtual void boo() { t.foo<Q>(); } };

int main() { return 0; }

Вот этот код не компилируется, из-за, якобы, синтаксической ошибки. Тем не менее, если такой-же вызов t.foo<Q>() будет стоять, например, в main(), но не в B::boo(), то всё скомпилируется.

Так вот, сабж...


class F { public: template<class T> void foo(){}; }; template<class T, class Q> class B { T t; public: virtual void boo() { t.template foo<Q>(); } }; int main() { return 0; }

В данном случае "<" был неразличим для компилятора: - это сравнение (по умолчанию) - это шаблон

Как результат ошибка.

io ★★
()
Ответ на: комментарий от io

Точно! Вот я придурок! :-) Когда целыми днями пишешь офигенно умные программы, от компилятора хочется невозможного (правда, вижуляк такое, вроде бы, кушал)...

Ясное дело, компилятор не знает, что есть такое foo в неизвестном типе T, и что такое Q. Да уж...

yz
() автор топика

учим матчасть

template<class T, class Q>

class B {

T t;

public:

virtual void boo()

{

t.template foo<Q>();

}

};

acefsm
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.