argument-dependent-lookup

Следующий фрагмент: #include <memory> #include <utility> namespace foo { template <typename T> void swap(T& a, T& b) { T tmp = std::move(a); a = std::move(b); b = std::move(tmp); } struct bar { }; } void baz() { std::unique_ptr<...

Это продолжение вопроса здесь о перегрузке функций с зависящим от аргумента поиском (ADL). Я хотел проверить свое понимание правил в этих обстоятельствах, поэтому я написал тестовый код. Во-первых, конечно, в std нет swap для класса HasPtr, поэтому я написал собственное пространство имен, которое содержит в...

В Что такое идиома копирования и замены Этот пример показан: 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 the members of two classes, // the two classes are effecti...

Ценится цитата из стандарта. #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 const& max(X::A const& a, X::A const& b) { std::cout <...

У меня есть набор шаблонов/функций, которые позволяют мне печатать кортеж/пару, предполагая, что каждый тип в кортеж/паре имеет operator<< определенный для него. К сожалению, из-за 17.4.3.1 добавление моих operator<< перегрузок в std является незаконным. Есть ли другой способ заставить ADL найти м...

Я пытаюсь найти элемент в векторе, используя перегруженный оператор==(). Однако, если использовать type1 в следующем коде, выход будет равен 1 и 0 (не найден). Использование type2 дает как 1, так и 1. Среда-Xubuntu 12.04 и g++ версии 4.6.3. #include <iostream> #include <vector> #include <algo...

при создании пользовательского контейнерного класса, который играет по обычным правилам (т. е. работает с алгоритмами STL, работает с корректным общим кодом и т. д.), в C++03 было достаточно реализовать поддержку итератора и функции начала/конца члена. C++11 вводит две новые концепции-на основе диапазона для...