I know this is nitpicky, but I haven't found references to it (or the whys) in the database. I am not a lawyer, but I think that according to [0][1], the following program should not compile: #include <iostream> template <typename T> void f (T t) { g (t); } int main () { f<int> (42); } // point of instantiation of f<int>(), g(int) not yet visible void g (int i) { std::cout << i << '\n'; } To my best knowlege, if function g would take a non-intrinsic type, this would be correct, but with raw int, ADL should not take place, i.e. the call to g(int) in f<int>(int) refers to an unresolved symbol. [0] Vandevoorde/Josuttis 10.3.2: Points of Instantiation (http://books.google.de/books?id=EotSAwuBkJoC&pg=PA146&lpg=PA146&dq=vandevoorde+point+of+instantiation&source=bl&ots=iwJ0D7_jhd&sig=1yVPrdPe2Dx1AtoPFDpAkFKIe2Y&hl=de&ei=0WedSYORD42K0AXf24DgBQ&sa=X&oi=book_result&resnum=1&ct=result#PPA147,M1) [1] ISO/IEC 14882:2003(draft) 14.6.4.1 Point of instantiation, Item 1
probably related to PR 23885 and/or PR 16635
EDG accepts it in strict mode though I also think it's invalid.
Actually this is a combition of two issues really. First is argument dependent lookup for fundamental types, do they have an assoicated namespaces (I think there is a bug report for that)? And then the other bug is the wrong place: PR 16635.
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#225 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#993
Both 225 and 993 have been resolved, as NAD and FDIS, respectively. We should analyze which are the implication for this..
Fixed by the patch for 29131. *** This bug has been marked as a duplicate of bug 29131 ***