Articles of recherche dépendante d’arguments

Utilisation de funcName () avant la déduction de auto – pourquoi dans un cas mais pas dans l’autre?

Considérons le code suivant: #include #include namespace Test { template struct StateTableEntry { State state; }; template using StateRow = std::unordered_map<int,StateTableEntry>; template auto& entryBAD(StateRowValueType& row) { return row.second; } template auto entryOK(StateRowValueType& row) -> decltype((row.second)) { return row.second; } } template std::enable_if_t<I==std::tuple_size::value> for_each_index_of(O&){} template std::enable_if_t<startingIndex<std::tuple_size::value> for_each_index_of(const Operation& operation) { operation(std::integral_constant()); for_each_index_of(operation); } int main() { […]

La recherche dépendant de l’argument va-t-elle avant la recherche de scope normale?

C’est le code en question qui apparaît au §13.3 de “C ++ Primer”, 5ed: void swap(Foo &lhs, Foo &rhs) { using std::swap; swap(lhs.h, rhs.h); // uses the HasPtr version of swap // swap other members of type Foo } Le livre mentionne le phénomène de l’échange de classe spécifique qui n’est pas caché par la […]

Lambdas, types locaux et espace de noms global

Ce programme minimal template void foo (X x) { bar (x); } template void bar (X x) { } int main () { foo ([]{}); } comstack avec gcc (4.8.5 et 5.3) et ne comstack pas avec clang (3.7) Mon parsing est la suivante. bar est utilisé dans foo et déclaré après foo , il […]

Pourquoi ‘std :: endl’ nécessite-t-il la qualification d’espace de noms lorsqu’il est utilisé dans l’instruction ‘std :: cout << std :: endl; ", étant donné la recherche dépendante d'un argument?

Je regardais l’entrée Wikipedia sur la recherche dépendante d’un argument et (le 4 janvier 2014) l’exemple suivant a été donné: #include int main() { std::cout << "Hello World, where did operator<<() come from?" << std::endl; } … avec le commentaire suivant: Notez que std :: endl est une fonction mais nécessite une qualification complète, car […]

Règles de recherche d’opérateur C ++ / recherche Koenig

Lors de l’écriture d’une suite de tests, je devais fournir une implémentation de l’ operator<<(std::ostream&… for boost unit test). Cela a fonctionné: namespace theseus { namespace core { std::ostream& operator<<(std::ostream& ss, const PixelRGB& p) { return (ss << "PixelRGB(" << (int)pr << "," << (int)pg << "," << (int)pb << ")"); } }} Cela n’a […]

Utilisation d’opérateurs d’égalité avec boost :: facultatif

J’essaie de définir un opérateur d’égalité pour un type T défini dans un autre espace de nom, puis d’utiliser l’opérateur d’égalité sur l’ optional . Sur Clang (Apple LLVM 9.1.0), ce code: namespace nsp { struct Foo { }; } bool operator==(const nsp::Foo& a, const nsp::Foo& b); void foo() { optional a = none; optional […]

Recherche dépendante de l’argument – quand est-il terminé, que recherche-t-on et comment pouvez-vous le forcer (ou l’empêcher)?

Je ne parviens pas à comprendre les règles de la recherche dépendante de l’argument (Koenig). Considérons le code ci-dessous: #include using namespace std; namespace adl { struct Test { }; void foo1(Test const &) { cout << "ADL used (foo1)" << endl; } void foo2(Test const &) { cout << "ADL used (foo2)" << endl; […]

Les iterators de conteneurs personnalisés garantissent-ils à ADL de prendre en compte namespace std?

Je n’ai aucune intention d’utiliser ceci dans du code réel. Je promets. La norme garantit-elle que l’espace de noms std sera trouvé lorsqu’un argument de fonction est de type container::iterator et container::iterator n’est pas une typedef pour un type intégré? Par exemple #include #include int main() { std::set s; find(s.begin(), s.end(), 0); //do I have […]

Existe-t-il un moyen légal d’imprimer des n-uplets et des paires en utilisant l’opérateur <<?

J’ai un ensemble de modèles / fonctions qui me permettent d’imprimer un tuple / paire en supposant que chaque type du tuple / paire a un operator<< défini pour celui-ci. Malheureusement, à cause de 17.4.3.1, il est illégal d’append mon operator<< overloads à std . Existe-t-il un autre moyen d’obtenir ADL pour trouver mon operator<< […]

ADL ne recherche-t-il pas les fonctions membres statiques?

Ceci est la question suivante de Est-ce que la recherche dépendante des arguments ne recherche que les espaces de noms ou les classes? , Dans lequel @David Rodríguez a déclaré “ADL regardera dans l’espace de nommage du type, ainsi qu’à l’ intérieur du type même”. Je me suis peut-être trompé sur ce qu’il avait essayé […]