What MSVC implements is not a proper implementation of the second phase either. In other words, the MSVC's behavior cannot be described by a mere "MSVC postpones all lookup till the second phase". That means that in the above example the compiler is not supposed to see void foo(int) at the second phase either. ordinary unqualified name lookup) is not extended by the second phase - it still sees those and only those declarations that were visible at the first phase. Foi originalmente um produto autnomo, mas agora est includo como parte do Microsoft Visual Studio. The language specification clearly states that during the second lookup phase only ADL-nominated namespaces get extended with additional declarations accumulated between the point of definition and point of instantiation. O que um Visual C ++ Redistribuvel O Microsoft Visual C ++ um ambiente de desenvolvimento integrado (IDE) usado para criar Aplicativos do Windows nas linguagens de programao C, C ++ e C ++ / CLI. But what it does after that does not really behave as a proper implementation of the second lookup phase. At the surface, it is the obvious fact that Microsoft's compiler fails to perform early (first phase) lookup for a non-dependent expression foo(0). However, MSVC (2005 as well as 2010 Express) will report an error because of incorrect implementation of two-phase lookup.Īnd if you look closer, the issue is actually two-layered. The above code is supposed to compile in a standard C++ compiler.
bind it to 'foo(int)', reporting an error in the late, during instantiation of 'S::S()') and VS2005 will resolve the 'foo(0)' call here (i.e. A standard-compliant compiler is supposed to I'll just copy an example from my "notebook" int foo(void*)