Resultados de la búsqueda a petición "argument-dependent-lookup"

2 la respuesta

¿Por qué la función declarada dentro de otra función no participa en la búsqueda dependiente del argumento?

Considere un ejemplo simple: 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 foo(tag<int>{}); // 'bar' was not declared in this ...

4 la respuesta

¿Por qué ADL no encuentra plantillas de funciones?

¿Qué parte de la especificación C ++ restringe la búsqueda dependiente de argumentos para encontrar plantillas de funciones en el conjunto de espacios de nombres asociados? En otras palabras, ¿por qué la última llamada enmain a continuación no ...

2 la respuesta

¿Cuáles son las trampas de ADL?

Hace algún tiempo leí un artículo que explicaba varias trampas de la búsqueda dependiente de argumentos, pero ya no puedo encontrarlo. Se trataba de obtener acceso a cosas a las que no debería tener acceso o algo así. Así que pensé en preguntar ...

3 la respuesta

Operador de sobrecarga >> para std :: pair <int, int>

Estoy tratando de usarboost::lexical_cast en unstd::pair<int, int>. #include <iostream> #include <utility> #include <boost/lexical_cast.hpp> namespace my { // When my_pair is a user defined type, this program compiles // and runs without any ...

3 la respuesta

¿Por qué ADL no funciona con Boost.Range?

Considerando: #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)); }Demostración en vivo de ...

2 la respuesta

¿Por qué esta llamada a swap () es ambigua?

El siguiente programa #include <algorithm> #include <utility> #include <memory> namespace my_namespace { template<class T> void swap(T& a, T& b) { T tmp = std::move(a); a = std::move(b); b = std::move(tmp); } template<class T, class Alloc ...

1 la respuesta

Ocultar nombre usando declaración

#include <iostream> struct H { void swap(H &rhs); }; void swap(H &, H &) { std::cout << "swap(H &t1, H &t2)" << std::endl; } void H::swap(H &rhs) { using std::swap; swap(*this, rhs); } int main(void) { H a; H b; a.swap(b); }Y este es el ...

2 la respuesta

¿Existe una forma legal de imprimir tuplas y pares usando el operador <<?

Tengo un conjunto de plantillas / funciones que me permiten imprimir una tupla / par suponiendo que cada tipo en la tupla / par tieneoperator<< definido para ello. Desafortunadamente, debido a 17.4.3.1, es ilegal agregar mioperator<< sobrecargas ...

1 la respuesta

El operador de comparación para std :: vector <T> no puede encontrar el operador de comparación para T

El siguiente código muy simple no compilará #include <vector> #include <string> namespace Foobar { struct Test { std::string f; std::uint16_t uuid; }; } bool operator==(const Foobar::Test& lhs, const Foobar::Test& rhs){ return lhs.f == rhs.f && ...

1 la respuesta

Basado en rango para bucles y ADL

Los C ++ 0x borrador de trabajo estándar [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf] declara (sección 6.5.4) lo siguiente sobre las llamadas begin () y end () que están implícitas en un bucle for basado en rango: 'begin' ...