Mega Code Archive

 
Categories / C++ Tutorial / Template
 

Namespace with template function

/* The following code example is taken from the book  * "C++ Templates - The Complete Guide"  * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002  *  * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.  * Permission to copy, use, modify, sell and distribute this software  * is granted provided this copyright notice appears in all copies.  * This software is provided "as is" without express or implied  * warranty, and with no claim as to its suitability for any purpose.  */ #include <iostream> namespace X {     template<typename T> void f(T); } namespace N {     using namespace X;     enum E { e1 };     void f(E) {         std::cout << "N::f(N::E) called\n";     } } void f(int) {     std::cout << "::f(int) called\n"; } int main() {     ::f(N::e1);  // qualified function name: no ADL     f(N::e1);    // ordinary lookup finds ::f() and ADL finds N::f(), }                //  the latter is preferred ::f(int) called N::f(N::E) called