BUG: Error C2946 on Explicit Instantiation of Imported Templates (263633)



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 Q263633

SYMPTOMS

If you try to perform explicit instantiation of a template class or function imported from another namespace by means of a using declaration or using directive, you may receive the following error message:
Test.cpp(8) : error C2946: explicit instantiation; 'class ?$A@H' is not a template-class specialization

RESOLUTION

To work around this problem, qualify the template name with the name of the namespace in which the template is defined.

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: none
namespace N {

template <class T>
struct A { };
}

using namespace N;             // This does not work.
using N::A;                    // This also does not work.
template class A<int>;

// template class N::A<int>;   // This works.
				

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbBug kbCompiler kbCPPonly kbpending kbtemplate KB263633