Вопросы по теме 'argument-dependent-lookup'

Избыточность определения оператора на основе диапазона
Глядя на n3092, в §6.5.4 мы находим эквивалентность цикла for на основе диапазона. Затем он продолжает говорить, чему равны __begin и __end . Он различает массивы и другие типы, и я нахожу это излишним (также сбивающим с толку). В нем...
4023 просмотров

Почему ADL не находит шаблоны функций?
Какая часть спецификации C++ ограничивает поиск, зависящий от аргумента, поиском шаблонов функций в наборе связанных пространств имен? Другими словами, почему последний вызов в main ниже не компилируется? namespace ns { struct foo {};...
4769 просмотров

Для чего был изобретен поиск, зависящий от аргумента?
Для чего был изобретен поиск, зависящий от аргумента (ADL)? Это просто для того, чтобы мы могли писать cout << stuff вместо std::operator<<(cout, stuff) ? Если это так, то почему ADL не был ограничен операторами, а не всеми функциями?...
1229 просмотров
schedule 20.06.2022

ADL не работает, когда есть лямбда-аргументы?
Некоторое время назад я заметил, что в Visual C++ 10 ADL дает сбой, когда хотя бы один из аргументов является лямбдой. std::vector<float> vec; for_each(begin(vec), end(vec), [](float) {}); Приведенное выше не удается скомпилировать в...
312 просмотров

Ненавязчивый способ обойти неоднозначность поиска, зависящую от аргумента.
Вот мой случай: Я пытаюсь использовать библиотеку, которая имеет тип Foo::a и также указывает Foo::swap . Другая библиотека, которую я использую, имеет экземпляр std::vector<Foo::a> . Я пытаюсь скомпилировать это в Windows с помощью...
265 просмотров

Поиск в шаблоне, зависящий от аргумента
Меня смущает поиск имени функции в контексте шаблона. Я знаю, что компилятор откладывает поиск идентификатора, зависящего от аргументов, в шаблонном коде до тех пор, пока шаблон не будет создан. Это означает, что иногда вы можете иметь...
1162 просмотров

Обходной путь для обратного поиска, зависящего от аргумента?
C++ имеет ADL (просмотр в зависимости от аргумента), с помощью которого, как следует из его названия, контекст (пространство имен) функции может быть выведен из контекста (пространства имен) (любого из) аргумента(ов). fun(a); // if the type of a...
414 просмотров

Как устранить неоднозначность вызова ADL с кандидатами в разных пространствах имен?
Учитывая следующий класс: struct foo : public boost::static_visitor<> { void do_stuff(int item) {} } Теперь в другом контексте у меня есть std::vector<foo> и я хочу выполнить на нем следующий алгоритм: using namespace...
108 просмотров
schedule 21.01.2023

Имитация зависящего от аргумента поиска аргументов шаблона
Я столкнулся с этой проблемой, когда недавно писал код, похожий на библиотеку, и я подумал, что обсуждение этого может помочь и другим. Предположим, у меня есть библиотека с некоторыми шаблонами функций, определенными в пространстве имен. Шаблоны...
276 просмотров

Перегрузка оператора C++ и связанное с ним пространство имен
Следующий упрощенный пример компилируется в gcc и Visual Studio , но завершается ошибкой в ​​ clang !? namespace N { struct A {}; template <typename T> double operator+ (T a, double d) {return d;} template <typename...
840 просмотров

Шаблоны поиска и функций, зависящие от аргумента [дубликаты]
Вот пример: #include <string> #include <algorithm> #include <memory> using std::string; int main() { string str = "This is a string"; // ok: needn't using declaration, ADL works auto it = find(str.begin(),...
460 просмотров

Вложенные классы и ADL
Вот код: namespace Namespace { struct L0 { enum SomeEnum { EnumVal }; struct L1 { friend void f(SomeEnum) { std::cout << "f()" <<...
494 просмотров

Почему функция, объявленная внутри другой функции, не участвует в поиске, зависящем от аргумента?
Рассмотрим простой пример: template <class T> struct tag { }; int main() { auto foo = [](auto x) -> decltype(bar(x)) { return {}; }; tag<int> bar(tag<int>); bar(tag<int>{}); // <- compiles OK...
386 просмотров

Ожидаются ли коллизии между выражениями и пространствами имен при вызове ADL?
Учитывая следующий пример, я ожидаю, что синтаксический анализатор распознает std как функцию: #include <algorithm> namespace test { class foo{}; void std(foo f); } int main() { std(test::foo()); return 0; } Однако в...
619 просмотров
schedule 01.10.2022

Применяется ли правило MISRA C++ 14-5-1: (не объявлять универсальную функцию в связанном пространстве имен) для std::operator‹‹?
MISRA C++ 2008, Правило 14-5-1 гласит, что « универсальная функция , не являющаяся членом, должна быть объявлена ​​только в пространстве имен, которое не является связанным пространством имен ». Учитывая случай (например) перегрузки...
340 просмотров

Как работает вывод типа шаблона и разрешение перегрузки?
Код №1 #include <iterator> #include <algorithm> #include <iostream> #include <vector> template <typename container> void sort(typename container::iterator beginning, typename container::iterator end) {...
383 просмотров

оператор ‹‹ поиск, зависящий от аргумента, не ищет в глобальном пространстве имен
В следующем сценарии внутри функции() в строке ss << bb я получаю сообщение об ошибке: двоичный '‹‹': не найден оператор, который принимает правый операнд типа 'CommonType' (или нет приемлемого преобразования). Мое понимание ADL...
71 просмотров

Вызывает ли std::(точка настройки) наиболее подходящую перегрузку?
Начиная с C++20, концепция точки настройки представлена ​​в [namespace.std]/7 : Кроме пространства имен std или пространства имен внутри пространства имен std, программа может предоставить перегрузку для любого шаблона библиотечной функции,...
98 просмотров

Включение ADL для расстояния в пространстве имен, отличном от std ::, с откатом к std :: distance
Мой вариант использования выглядит следующим образом: в пространстве имен, отличном от std ::, класс имеет шаблонную функцию-член, которая принимает 2 (шаблонных) итератора в качестве параметров, а часть вызова функции включает вызов distance () на...
36 просмотров
schedule 24.09.2022