2015-11-25 2 views

ответ

6

Так как он упоминает друг поиск, «структурная сфера» в данном случае, как представляется, относятся к области класса T (когда T является класс) или объема вмещающего класса (когда T типа члена, объявленным внутри класса) , Формулировка всего этого параграфа звучит довольно странно, поскольку язык C++ формально не относится к типам классов как «типы структуры» и формально не определяет «структурный охват». Кроме того, это похоже на область класса как «пространство имен», что неверно.

Упоминая друзей, он, очевидно, подразумевает такие ситуации

struct T { 
    friend void foo(T) {} 
}; 

int main() { 
    T t; 
    foo(t); 
} 

или

struct T { 
    enum E { A }; 
    friend void foo(E) {} 
}; 

int main() { 
    T::E e = T::A; 
    foo(e); 
} 

В этих случаях вызовы foo в main возможно разрешить только потому, что ADL проверяет объем класса T и явно ищет функции друзей там. Без ADL foo будет невидимым для main.

+2

Затем мы должны исправить Википедию (и мы будем иметь в виду вас :-) –

+0

Нарушение текста удалено. Я не вижу смысла в сводке [basic.lookup.argdep]/2 для статьи в Википедии. –

Смежные вопросы