Microsoft KB Archive/167113

From BetaArchive Wiki
Knowledge Base


Article ID: 167113

Article Last Modified on 7/5/2005



APPLIES TO

  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition



This article was previously published under Q167113

SYMPTOMS

The compiler generates the compiler error C2734 and C2166, when compiling a template function with a const reference of class T as an argument, where class T is a template parameter.

C2734: 'identifier' : const object must be initialized if not extern C2166: l-value specifies const object

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem was corrected in Visual C++ version 6.0 for Windows.

MORE INFORMATION

The following sample demonstrates the problem and the workaround.

Sample Code

    /* Compiler Options: None
    */ 
    //#define WORKAROUND1 // uncomment this line for workaround1
    //#define WORKAROUND2 // uncomment this line for workaround2

    template <class T>
    T Test (const T& arg1)

   {

    #ifndef WORKAROUND1
        T x ;
      x = arg1;
    #else
       T x = arg1 ; // WORKAROUND 1
    #endif

        return x;

   }

    int main()
   {
    #ifndef WORKAROUND2
        int testValue = Test ( 7 );
   #else
       int testValue = Test <int> ( 7 ); // WORKAROUND 2
   #endif

    return 0;
   }
                

Keywords: kbbug kbfix kbvc600fix KB167113