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->
, но я упростил пример для цели этого вопроса.