Удаление использования пространства имен RequiredNamespace в последней строке устраняет ошибку, но я ожидаю, что размещение использования пространства имен в конце файла не будет иметь никакого эффекта. Он также полагается на то, что AnotherFunction является функцией шаблона, поэтому я ожидаю, что компилятор генерирует шаблонные функции в неправильной области или не сбрасывает список используемых пространств имен перед этим.
Один и тот же код компилируется под GCC.
Оба компилятора, похоже, генерируют код для TemplatedFunction после использования пространства имен Namespace< /code> определение, по крайней мере, насколько я могу судить, внося ошибки и глядя на порядок их вывода.
Код: Выделить всё
namespace Ambiguity
{
class cSomeClass
{
};
template
void TemplatedFunction(T a)
{
// this is where the error occurs, the compiler thinks Ambiguity
// might refer to the class in RequiredNamespace below
Ambiguity::cSomeClass();
}
}
namespace RequiredNamespace
{
// without a namespace around this class, the Ambiguity class
// and namespace collide
class Ambiguity
{
};
}
int main()
{
// to force the templated function to be generated
Ambiguity::TemplatedFunction(4);
}
// removing this removes the error, but it shouldn't really do anything
using namespace RequiredNamespace;
Это ошибка в компиляторе?
Подробнее здесь: https://stackoverflow.com/questions/370 ... -namespace