Вопросы по теме 'argument-dependent-lookup'
Каковы подводные камни ADL?
Некоторое время назад я прочитал статью, в которой объяснялись некоторые ловушки поиска, зависящего от аргумента, но я больше не могу ее найти. Речь шла о получении доступа к вещам, к которым у вас не должно быть доступа, или что-то в этом роде....
4878 просмотров
schedule
25.10.2022
C++ ADL во вложенных пространствах имен с функцией шаблона
У меня вопрос относительно стандартного разрешения ADL в C++.
Вот пример кода, объясняющий мой запрос:
#include <string>
// The mechanism:
namespace A {
template< class C >
::std::string scope(const C*)
{ return "A"; }...
834 просмотров
schedule
28.10.2022
ADL без шаблонов
Можно ли показать мне пример ADL без использования шаблонов? Никогда не видел ничего подобного. Я имею в виду что-то вроде здесь . В частности, меня интересует пример, в котором это приводит к какой-то ловушке, как в упомянутом выше.
ИЗМЕНИТЬ:...
230 просмотров
schedule
07.05.2023
Поиск в зависимости от аргумента в базе класса шаблона
У меня есть класс-шаблон NB::B<T> , производный от класса-шаблона NA::A в пространстве имен. act<T> — это функция шаблона, вызывающая функцию add_ref для экземпляра своего аргумента шаблона. В частности,...
713 просмотров
schedule
29.10.2022
Почему ADL имеет приоритет над функцией в пространстве имен std, но приравнивается к функции в пространстве имен, определяемом пользователем?
У меня есть два фрагмента для ADL в демонстрационных целях. Оба фрагмента были скомпилированы компиляторами VC10, gcc и comeau C ++, и результат одинаков для всех трех.
‹1> ADL против использования директивы пользовательского пространства имен:...
1300 просмотров
schedule
02.03.2022
Обычный неквалифицированный поиск и поиск по имени в зависимости от аргумента (ADL)
Для неквалифицированного поиска имени, «Обычного неполного поиска» и «Поиска имени, зависящего от аргумента» (ADL), я не могу найти в стандарте, какой из них происходит первым?
Опять же, поскольку оба пытаются добавить что-то в набор кандидатов на...
127 просмотров
schedule
06.02.2023
Разве ADL не ищет статические функции-члены?
Это дополнительный вопрос от Поиск только по аргументам пространства имен или классы тоже? , в котором @David Rodríguez сказал: «ADL будет искать во включающем пространстве имен типа, а также внутри самого типа». Возможно, я ошибся в том, что он...
517 просмотров
schedule
26.10.2022
Бьярн ошибается насчет этого примера ADL, или у меня есть ошибка компилятора?
Я читаю Язык программирования C ++, 4-е издание (от Бьярна Страуструпа ) о аргумент-зависимый-поиск . Вот цитата (26.3.6, Сверхагрессивный ADL):
Поиск, зависящий от аргументов (часто называемый ADL), очень полезен, чтобы избежать...
3469 просмотров
schedule
17.05.2022
Почему при двухэтапном поиске не выбирается перегруженная версия swap?
Я изучаю этот увлекательный ответ на тонкий вопрос относительно наилучшей практики реализации swap функции для определяемых пользователем типов . (Изначально мой вопрос был мотивирован обсуждением незаконности добавления типов в пространство...
648 просмотров
schedule
07.10.2022
пространство имен, конфликт ADL члена класса
#include <iostream>
namespace outside {
struct A {
int outer = 42;
friend void print(A const& a, std::ostream& os)
{ os << "outside::A " << a.outer << '\n'; }
};
namespace inside {
struct A :...
100 просмотров
schedule
03.04.2024
Существуют ли другие правила, касающиеся ADL или конфликтов имен в отношении перегруженных операторов?
Я думаю, что этот пример лучше всего иллюстрирует мой вопрос:
namespace N {
class C {
public:
friend bool operator==(const C& c, const C& x) {
return true;
}
friend bool f(const C& c, const...
130 просмотров
schedule
11.06.2023
Как задокументировать функциональность внедрения друзей с помощью doxygen?
Учитывая некоторый код, как в следующем примере:
class MyClass;
class Injector {
/**
* @brief MyClass addition.
*/
friend MyClass operator+(MyClass a, MyClass b) { ... }
};
class MyClass: private Injector {};
Как я могу...
1569 просмотров
schedule
17.04.2023
Как компилятор находит шаблонную функцию X::max(T const&, T const&) через ADL в приведенном ниже коде?
Цитата из стандарта приветствуется.
#include <iostream>
namespace X {
class A {};
}
template <typename T>
inline T const& max(T const& a, T const& b, T const& c)
{
return max(max(a, b), c);
}
inline X::A...
491 просмотров
schedule
22.09.2022
Cxx-prettyprint (для стандартных контейнеров) определяет свои операторы вывода внутри пространства имен std - это стандартное нарушение?
Я успешно использую cxx-prettyprint: C ++ Container Pretty-Printer для записи значений контейнера. (См. Также Контейнеры STL C ++ с красивой печатью ). Он прекрасно работает даже на старый компилятор VS-2005 (VC8) (с заголовком...
210 просмотров
schedule
06.07.2022
Может ли рефакторинг перегруженного оператора в функцию, не являющуюся членом, сломать какой-либо код?
Рассмотрим устаревший шаблон класса с перегруженными операторами сложения += и + .
template<class T>
class X
{
public:
X() = default;
/* implicict */ X(T v): val(v) {}
X<T>& operator+=(X<T> const& rhs)...
214 просмотров
schedule
21.08.2022
Постфиксное выражение со списком аргументов-шаблонов не подхватывается ADL
Я хочу понять, почему вызов шаблона f ниже не компилируется:
struct A
{
template<class...>
friend void f(A) { }
} x;
int main()
{
f<>(x);
}
ADL требует, чтобы постфиксное выражение в вызове функции было неполным...
69 просмотров
schedule
11.05.2023
Как использование std :: swap включает ADL?
В Что такое идиома копирования и обмена показан этот пример:
friend void swap(dumb_array& first, dumb_array& second) // nothrow
{
// enable ADL (not necessary in our case, but good practice)
using std::swap;
// by swapping...
4438 просмотров
schedule
10.04.2022
Возможная ошибка ADL в Visual Studio 2013
Следующий упрощенный код не компилируется в VS2013:
#include <cmath>
namespace mine
{
template <typename A>
struct Base
{
double value() const { return static_cast<const A&>(*this).value(); }
};...
290 просмотров
schedule
20.02.2023
Оператор выходного потока Argument Dependent Lookup (ADL) для основных/STL-типов/классов
Я хочу преобразовать unsigned char и std::vector<unsigned char> в шестнадцатеричную строку. В настоящее время я использую выходной поток operator<< для реализации преобразования, но этот подход, похоже, имеет некоторые недостатки в...
170 просмотров
schedule
26.03.2023
Почему ADL не работает с Boost.Range?
Учитывая:
#include <cassert>
#include <boost/range/irange.hpp>
#include <boost/range/algorithm.hpp>
int main() {
auto range = boost::irange(1, 4);
assert(boost::find(range, 4) == end(range));
}
Демо Live Clang...
980 просмотров
schedule
10.12.2022