Ошибка компилятора VS2008(+?) с шаблонными функциями и использованием пространства имен.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка компилятора VS2008(+?) с шаблонными функциями и использованием пространства имен.

Сообщение Anonymous »

Я обнаружил странный случай, когда некоторый код (ниже) не компилируется в Visual Studio 2008 и выдает «ошибку C2872: 'Ambiguity': неоднозначный символ» в строке 12.

Удаление использования пространства имен 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»