BUG: Full Koenig Lookup Works Only for Operators (242190)



The information in this article applies to:

  • Microsoft Visual C++, 32-bit Enterprise Edition 5.0
  • Microsoft Visual C++, 32-bit Professional Edition 5.0
  • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
  • Microsoft Visual C++, 32-bit Professional Edition 6.0
  • Microsoft Visual C++, 32-bit Learning Edition 6.0

This article was previously published under Q242190

SYMPTOMS

Argument-dependent name lookup, also known as Koenig lookup, works only for operators and not regular functions in a namespace.

CAUSE

The compiler does not fully support argument-dependent name lookup as specified in the C++ Standard. Please refer to the C++ Standard, section 3.4.2, for information on argument-dependent name lookup.

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

Steps to Reproduce Behavior

The following code example demonstrates the error:
//test.cpp
// compiler option needed:/GX  
#include <iostream>
namespace N1 {
	struct T1 {
	};
	void g(T1) {
	}
 	T1 operator+( T1 x, T1 y) {
		std::cout<< "In N1::+" <<std::endl;
		return y;
	}
}

int main() {
	N1::T1 t1 ,t2;
	g(t1);	// error C2065: 'g' : undeclared identifier
	t1 + t2; // works fine calls N1::operator+
	return 0;
}
				

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbBug kbCompiler kbCPPonly kbLangCPP KB242190