Компилятор LLVM 2.0: предупреждение с "использованием пространства имен std;"

В Xcode с использованием LLVM 2.0, когда я помещаю строку using namespace std; в свой код на С++, я получаю это предупреждение:

Семантическая проблема
    Использование директивы относится к неявно определенному пространству имен 'std'

Есть ли способ исправить это? Почему это предупреждение?

Ответы

Ответ 1

Включили ли вы стандартные файлы заголовков? В противном случае компилятор не знает о namespace std.

Пожалуйста, напишите больше кода, чтобы уточнить.

Ответ 2

Я решил эту проблему, подобную этой

#include <iostream>

using namespace std;
/// This function is used to ensure that a floating point number is
/// not a NaN or infinity.
inline bool b2IsValid(float32 x)
{
    if (x != x)
    {
        // NaN.
        return false;
    }
    float32 infinity = std::numeric_limits <float32>::infinity();
    return -infinity < x && x < infinity;
    return true;

}

Ответ 3

Перемещение пространства имен using std после #include может исключить это предупреждение.

Ответ 4

Я вижу, что этот вопрос довольно старый, но для тех, кто это проверяет в будущем, я хотел бы добавить эту ссылку из документации LLVM в качестве дополнения к обсуждению и для poeple, ищущего дополнительную информацию:

Стандарты кодирования LLVM: не использовать использование пространства имен std;

Я считаю, что название довольно показательно, почему я поделился им, чтобы помочь с этим вопросом.

В LLVM мы предпочитаем явно префикс всех идентификаторов из стандартного пространства имен с префиксом "std::", а не полагаться на "using namespace std;".

В заголовочных файлах добавление директивы 'using namespace XXX' загрязняет пространство имен любого исходного файла, которое # включает заголовок. Это явно плохо.

Изменить: Поэтому вместо использования 'using std namespace;' явно введите std:: для каждого случая, когда вы используете стандартную библиотеку. Это позволяет избежать конфликтов с пространствами имен исходных файлов. Это то, о чем говорится в цитате из статьи.