struct Bar {
template<typename>
void baz() {
}
};
template<typename>
struct Foo {
Bar bar;
Foo() {
bar.baz<int>();
}
};
int main() {
return 0;
}
Этот код компилируется отлично (в GCC 4.7), но если я префикс вызова bar.baz<int>() с this->, baz становится зависимым именем, которое нуждается в устранении неоднозначности с помощью template.
bar.baz<int>(); // OK
this->bar.baz<int>(); // error
this->bar.template baz<int>(); // OK
Конечно this->bar может ссылаться только на Bar bar, чей член baz явно является шаблоном? Почему добавление this-> делает этот код двусмысленным для компилятора?
p.s. Первоначально bar был элементом данных шаблона базового класса, который нуждался в двусмысленности с this->, но я упростил пример для цели этого вопроса.