Microsoft KB Archive/249045

= BUG: C2964 On Pointer-To-Member As Template Argument =

Article ID: 249045

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition

-



This article was previously published under Q249045



SYMPTOMS
The compiler generates an error such as the following when a pointer-to-member is used as a class template parameter.

error C2964: invalid expression as template parameter



CAUSE
This C++ language feature has not yet been implemented in Visual C++.



RESOLUTION
To not use the pointer-to-member as a template argument, pass it as a parameter to the class constructor.



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



MORE INFORMATION
Use the following sample code to reproduce the behavior:
 * 1) ifdef BUG

struct MyClass { char a,b; MyClass : a('a'), b('b') {}; };

template class AnotherClass { private: MyClass m_var; public: char value { return m_var.*member_ptr; } };

int main {  AnotherClass<&MyClass::a> var1; AnotherClass<&MyClass::b> var2;   //<<<< Causes compiler error. return 0; }


 * 1) else

// WORKAROUND struct MyClass { char a,b; MyClass : a('a'), b('b') {}; };

template class AnotherClass { private: MyClass m_var; MbrType ClassType::*member_ptr; public: AnotherClass(MbrType ClassType::*mem_ptr) : member_ptr(mem_ptr) {} char value { return m_var.*member_ptr; } };

int main {  AnotherClass var1(&MyClass::a); AnotherClass var2(&MyClass::b); return 0; }


 * 1) endif

Keywords: kbbug kblangcpp kbtemplate kbcpponly kbpending kbcompiler KB249045

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.