170 похожих чатов

Товарищи, приветствую. Подскажите, где в Стандарте определяется понятие "to bind a

name" (даже контекстно)?

3 ответов

28 просмотров
Sergey-Anisimov Автор вопроса

Цитируемый вопрос вытек из нижеследующего рассуждения, вызванного разбором примера: namespace WF { struct S { friend void sub ( S ) { } }; } namespace IF { struct S1 { }; struct S2 { friend void sub ( S1 ) { } }; } /* ... */ sub(WF::S{}); /* WF */ sub(IF::S1{}); /* IF */ (WF - объявление нашлось; IF - соответственно, нет) 0. Допустим, что представленные friend-declaration работает как если бы объявление принадлежало innermost enclosing namespace, как заявляется на cppref: > A name first declared in a friend declaration within a class or class template X becomes a member of the innermost enclosing namespace of X, but is not visible for lookup (except argument-dependent lookup that considers X) 1. В обоих случаях место имеет ADL: вызов функции через unqual-id в условиях отсутствия первично подходящих объявлений. 2. Для единственного типа аргумента в каждом случае собирается множество associated entities, состоящее из одного элемента - самих классов (::WF::S и ::IF::S1 соответственно). 3. В обоих же случаях для этих классов поиск осуществляется в associated namespaces: ::WF и ::IF соответственно. Так поиск оказался бы эквивалентно успешен. 4. Тем не менее, неодинаковость результатов заставляет предположить ложность пункта 0. 5. Для правила об определении принадлежности объявления некоторой области видимости предусмотрены исключения, причем для friend-объявлений отдельно обозначается "do not bind names" (предположительно к области видимости, откуда и исходный вопрос: значимость факта не ясна). То же указывается в интерпретации friend-деклараторов, при этом отмечается, что такие объявления в рассматриваемом случае закрепляются за областью видимости наиболее вложенного пространства имен (что, видимо, и резюмируется в цитате с cppref из пункта 0). 6. Наконец, каких-либо иных уточнений, кроме принципиальной допустимости определения функций в контексте friend-declaration, я не нашел. Вопрос: Где в вышеприведенном рассуждении ошибка/упущение, что допускает наблюдаемое различие в поведении? P.S.: Прошу прощения за очередную стену.

Sergey Anisimov
Цитируемый вопрос вытек из нижеследующего рассужде...

а через ADL inline friend находится не через associated namespace, а через https://eel.is/c++draft/basic.lookup.argdep#4.2

Sergey-Anisimov Автор вопроса
Sergey Kaniskin
а через ADL inline friend находится не через assoc...

Это и составляет проблему, благодарю!

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта