c++ - initializer_list and argument-dependent lookup -


i'm trying use std::initializer_list argument in function uses argument-dependent lookup (adl). don't work , don't understand why. following minimal failing example:

    #include <initializer_list>     #include <iostream>      class foo {     public:       inline friend void bar(std::initializer_list<foo> v) {         std::cout << "size = " << v.size() << std::endl;       }     };      void baz(std::initializer_list<foo> v) {       std::cout << "size = " << v.size() << std::endl;     }      int main(){       foo a;       //bar({a,a});   // error: use of undeclared identifier 'bar'       baz({a,a});   // works        return 0;     } 

as seen above, equivalent global function works fine. why above not work?

i'm using clang on os x 10.10.

i believe problem subexpression1 { a, } not have type, , such not have associated types or namespaces in turn means adl not kick in. if have function in global namespace, normal lookup find it, , find { a, } can match function call initializer std::initializer_list<foo>.

1 syntax { a, } called braced-init-list , not expression (or subexpression) in language.


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -