Ответ на этот вопрос говорит в следующем коде:
#include <vector>
using std::vector;
struct foo {
template<typename U>
void vector();
};
int main() {
foo f;
f.vector<int>(); // ambiguous!
}
Последняя строка в main неоднозначна, потому что компилятор не только ищет vector
в пределах foo
, но также и как неквалифицированное имя, начинающееся с main
.Таким образом, он находит и std::vector
, и foo::vector
.Чтобы это исправить, вы должны написать
f.foo::vector<int>();
Я пробовал эту программу на всех популярных компиляторах C ++ (g++
, clang++
, vc++
и Intel C ++), и все компиляторы компилируют эту программубез ошибок.Итак, почему он сказал, что в этой программе есть двусмысленность?Что стандарт C ++ говорит об этом?