LINUX.ORG.RU

История изменений

Исправление utf8nowhere, (текущая версия) :

Наглядный пример того, в чём разница между using-declaration (using std::ranges::swap) и using-directive (using namespace std::ranges).

Второй начинает «работать» только когда поиск выбирается в глобальный неймспейс. И тогда находится и ::swap, и ::std::ranges::swap.

И происходит что-то вроде

namespace N
{
    float f = 0;
}

void f()
{
    using namespace N;
    f();
}
<source>:9:5: error: reference to 'f' is ambiguous
    f();
    ^
<source>:6:6: note: candidate found by name lookup is 'f'
void f()
     ^
<source>:3:11: note: candidate found by name lookup is 'N::f'
    float f = 0;
          ^

Исправление utf8nowhere, :

Наглядный пример того, в чём разница между using-declaration (using std::ranges::swap) и using-directive (using namespace std::ranges).

Второй начинает «работать» только когда лукап выбирается в глобальный неймспейс. И тогда находится и ::swap, и ::std::ranges::swap.

И происходит что-то вроде

namespace N
{
    float f = 0;
}

void f()
{
    using namespace N;
    f();
}
<source>:9:5: error: reference to 'f' is ambiguous
    f();
    ^
<source>:6:6: note: candidate found by name lookup is 'f'
void f()
     ^
<source>:3:11: note: candidate found by name lookup is 'N::f'
    float f = 0;
          ^

Исправление utf8nowhere, :

Наглядный пример того, в чём разница между using-declaration (using std::ranges::swap) и using-directive (using namespace std::ranges).

Второй начинает «работать» только когда лукап выбирается в глобальный неймспейс. И тогда находится и ::swap, и ::std::ranges::swap.

И происходит что-то вроде

namespace N
{
    float f = 0;
}

void f()
{
    using namespace N;
    f();
}
<source>:9:5: error: reference to 'f' is ambiguous
    f();
    ^
<source>:6:6: note: candidate found by name lookup is 'f'
void f()
     ^
<source>:3:11: note: candidate found by name lookup is 'N::f'
    float f = 0;
          ^

Исходная версия utf8nowhere, :

Наглядный пример того, в чём разница между using-declaration (using std::ranges::swap) и using-directive (using namespace std::ranges).

Второй начинает «работать» только когда лукап выбирается в глобальный неймспейс. И тогда находит там и ::swap, и ::std::ranges::swap.

И происходит что-то вроде

namespace N
{
    float f = 0;
}

void f()
{
    using namespace N;
    f();
}
<source>:9:5: error: reference to 'f' is ambiguous
    f();
    ^
<source>:6:6: note: candidate found by name lookup is 'f'
void f()
     ^
<source>:3:11: note: candidate found by name lookup is 'N::f'
    float f = 0;
          ^