BUG: Nested Class Does Not See typedef in the Enclosing Class (263600)



The information in this article applies to:

  • 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 Q263600

SYMPTOMS

According to the ANSI C++ Standard, a nested class should find a symbol in its enclosing class's scope before it finds it in global scope. However, when the code is compiled with Microsoft C++ compiler, the global scope is searched ahead of the enclosing class's scope.

Please refer to the sample code in the "More Information" section for details.

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 sample code demonstrates the bug:
// Test.cpp
// Compiler option needed: /GX

#include <iostream>
using std::cout;
using std::endl;

struct Target
{
  static void test()
  {
    cout <<
      "BUG: Nested class doesn't see typedef in the enclosing class."
    << endl;
  }
};

struct CorrectTarget
{
  static void test()
  {
    cout <<
      "Good: Nested  class CORRECTLY finds 'Target' as typedef in the enclosing class."
    << endl;
  }
};

struct Tester
{
  typedef CorrectTarget Target;

  struct Inner
  {
    static void test()
    {
      Target::test();
    }
  };
};

void main()
{
  Tester::Inner::test();
}


				
Program output: BUG: Nested class doesn't see typedef in the enclosing class.

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