Я пытаюсь найти любую информацию о ключевом слове, используемом как disambiguator, но в этом нет ничего. Вероятно, я ищу неправильные ключевые слова, но нет ничего подобного шаблону .template или → в стандарте. Google показывает только проблемы GCC с разных форумов, но на самом деле не объясняет, для чего он используется.
Подобный код не удалось скомпилировать без ключевого слова шаблона в строке 11 (в GCC), но я не совсем уверен, что это соответствует стандарту.
template<typename B>
struct S1
{
template<typename T> void test() {}
};
template<typename T>
struct S2
{
S2()
{
S1<T>().template test<int>();
}
};
int main()
{
S2<int>();
}
Итак, мой вопрос: зачем используется ключевое слово template, какая двусмысленность существует без этого ключевого слова и где я могу прочитать об этом (я бы очень признателен за ссылку на стандарт).
Спасибо.