Вопросы по теме 'argument-dependent-lookup'
Избыточность определения оператора на основе диапазона
Глядя на n3092, в §6.5.4 мы находим эквивалентность цикла for на основе диапазона. Затем он продолжает говорить, чему равны __begin и __end . Он различает массивы и другие типы, и я нахожу это излишним (также сбивающим с толку).
В нем...
4023 просмотров
schedule
05.05.2024
Почему ADL не находит шаблоны функций?
Какая часть спецификации C++ ограничивает поиск, зависящий от аргумента, поиском шаблонов функций в наборе связанных пространств имен? Другими словами, почему последний вызов в main ниже не компилируется?
namespace ns {
struct foo {};...
4769 просмотров
schedule
01.04.2022
Для чего был изобретен поиск, зависящий от аргумента?
Для чего был изобретен поиск, зависящий от аргумента (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 просмотров
schedule
16.01.2023
Ненавязчивый способ обойти неоднозначность поиска, зависящую от аргумента.
Вот мой случай:
Я пытаюсь использовать библиотеку, которая имеет тип Foo::a и также указывает Foo::swap . Другая библиотека, которую я использую, имеет экземпляр std::vector<Foo::a> . Я пытаюсь скомпилировать это в Windows с помощью...
265 просмотров
schedule
09.11.2023
Поиск в шаблоне, зависящий от аргумента
Меня смущает поиск имени функции в контексте шаблона. Я знаю, что компилятор откладывает поиск идентификатора, зависящего от аргументов, в шаблонном коде до тех пор, пока шаблон не будет создан. Это означает, что иногда вы можете иметь...
1162 просмотров
schedule
27.06.2023
Обходной путь для обратного поиска, зависящего от аргумента?
C++ имеет ADL (просмотр в зависимости от аргумента), с помощью которого, как следует из его названия, контекст (пространство имен) функции может быть выведен из контекста (пространства имен) (любого из) аргумента(ов).
fun(a); // if the type of a...
414 просмотров
schedule
10.08.2023
Как устранить неоднозначность вызова ADL с кандидатами в разных пространствах имен?
Учитывая следующий класс:
struct foo : public boost::static_visitor<> {
void do_stuff(int item) {}
}
Теперь в другом контексте у меня есть std::vector<foo> и я хочу выполнить на нем следующий алгоритм:
using namespace...
108 просмотров
schedule
21.01.2023
Имитация зависящего от аргумента поиска аргументов шаблона
Я столкнулся с этой проблемой, когда недавно писал код, похожий на библиотеку, и я подумал, что обсуждение этого может помочь и другим.
Предположим, у меня есть библиотека с некоторыми шаблонами функций, определенными в пространстве имен. Шаблоны...
276 просмотров
schedule
05.04.2022
Перегрузка оператора C++ и связанное с ним пространство имен
Следующий упрощенный пример компилируется в gcc и Visual Studio , но завершается ошибкой в clang !?
namespace N
{
struct A {};
template <typename T>
double operator+ (T a, double d) {return d;}
template <typename...
840 просмотров
schedule
21.06.2023
Шаблоны поиска и функций, зависящие от аргумента [дубликаты]
Вот пример:
#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 просмотров
schedule
24.08.2022
Вложенные классы и ADL
Вот код:
namespace Namespace
{
struct L0
{
enum SomeEnum
{
EnumVal
};
struct L1
{
friend void f(SomeEnum)
{
std::cout << "f()" <<...
494 просмотров
schedule
22.05.2023
Почему функция, объявленная внутри другой функции, не участвует в поиске, зависящем от аргумента?
Рассмотрим простой пример:
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 просмотров
schedule
18.05.2024
Ожидаются ли коллизии между выражениями и пространствами имен при вызове 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 просмотров
schedule
20.07.2023
Как работает вывод типа шаблона и разрешение перегрузки?
Код №1
#include <iterator>
#include <algorithm>
#include <iostream>
#include <vector>
template <typename container>
void sort(typename container::iterator beginning,
typename container::iterator end)
{...
383 просмотров
schedule
12.03.2023
оператор ‹‹ поиск, зависящий от аргумента, не ищет в глобальном пространстве имен
В следующем сценарии внутри функции() в строке ss << bb я получаю сообщение об ошибке:
двоичный '‹‹': не найден оператор, который принимает правый операнд типа 'CommonType' (или нет приемлемого преобразования).
Мое понимание ADL...
71 просмотров
schedule
25.03.2024
Вызывает ли std::(точка настройки) наиболее подходящую перегрузку?
Начиная с C++20, концепция точки настройки представлена в [namespace.std]/7 :
Кроме пространства имен std или пространства имен внутри пространства имен std, программа может предоставить перегрузку для любого шаблона библиотечной функции,...
98 просмотров
schedule
16.05.2022
Включение ADL для расстояния в пространстве имен, отличном от std ::, с откатом к std :: distance
Мой вариант использования выглядит следующим образом: в пространстве имен, отличном от std ::, класс имеет шаблонную функцию-член, которая принимает 2 (шаблонных) итератора в качестве параметров, а часть вызова функции включает вызов distance () на...
36 просмотров
schedule
24.09.2022