Ответ на этот вопрос содержится в следующем коде:
#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 ++?