Resultados da pesquisa a pedido "argument-dependent-lookup"

4 a resposta

Por que a pesquisa dependente de argumento não funciona com o modelo de função dynamic_pointer_cast

Considere o seguinte programa C ++: #include <memory> struct A {}; struct B : A {}; int main() { auto x = std::make_shared<A>(); if (auto p = dynamic_pointer_cast<B>(x)); } Ao compilar com o MSVC 2010, obtenho o seguinte erro: error C2065: ...

2 a resposta

Quais são as armadilhas da ADL?

Há algum tempo, li um artigo que explicava várias armadilhas da pesquisa dependente de argumento, mas não consigo mais encontrá-la. Tratava-se de obter acesso a coisas às quais você não deveria ter acesso ou algo assim. Então, pensei em perguntar ...

2 a resposta

Por que a função declarada dentro de outra função não participa da pesquisa dependente de argumento?

Considere um exemplo simples: 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 ...

2 a resposta

Por que essa chamada para swap () é ambígua?

O seguinte 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 a resposta

A refatoração de um operador sobrecarregado em uma função que não é membro pode quebrar algum código?

Considere um modelo de classe herdado com operadores de adição sobrecarregados+= e+ template<class T> class X { public: X() = default; /* implicict */ X(T v): val(v) {} X<T>& operator+=(X<T> const& rhs) { val += rhs.val; return *this; } X<T> ...

1 a resposta

C ++ 11 style SFINAE e visibilidade de função na instanciação de template

Não tenho certeza se isso tem algo a ver com sfinae, ou apenas algo que é relevante para qualquer função modelada. Eu estou tentando usar sfinae para ativar ...

1 a resposta

O operador de comparação para std :: vector <T> falha ao encontrar o operador de comparação para T

O código muito simples a seguir não será compilado #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 == ...

3 a resposta

Por que o ADL não está funcionando com o 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)); }Demonstração ao vivo ...

4 a resposta

Por que o ADL não encontra modelos de função?

Que parte da especificação C ++ restringe a pesquisa dependente de argumento da localização de modelos de função no conjunto de espaços para nome associados? Em outras palavras, por que a última chamada emmain abaixo falha ao compilar? namespace ...

3 a resposta

Comportamento interessante do compilador com espaços para nome

Suponha o seguinte código: #include <iostream> using namespace std; namespace X { class A{}; void f(A a){} void g(int a){} } int main() { X::A a; f(a); g(5); }Ao compilar o código, ocorre o seguinte erro de compilação: main.cpp: Na função 'int ...