Article: Q148808
Product(s): Microsoft C Compiler
Version(s): winnt:
Operating System(s):
Keyword(s): kbcode kbCompiler kbCPPonly kbVC
Last Modified: 03-AUG-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- The C/C++ Compiler (CL.EXE), included with:
- *EDITOR Please do not choose this product*Microsoft Visual C++ 32-bit Edition* use 241, 265, 225, version 4.0
-------------------------------------------------------------------------------
SYMPTOMS
========
The following error is generated:
error C2670: 'AFunction' : the template function cannot convert parameter 1
from type 'class Derived<int> *'
in code containing all of the following:
- A template class 'Derived' from another template class 'Base'.
- 'AFunction' taking a pointer to the 'Base' as a parameter.
- A call to the 'AFunction' passing a pointer to 'Derived' before instantiating
any object of that type.
See the sample code in this article for an example.
RESOLUTION
==========
To work around this problem, either explicitly instantiate 'Derived' or create a
dummy object of type 'Derived' before calling the 'AFunction'.
See the Sample Code for an example.
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 Microsoft Visual C++,
32-bit Edition, version 4.1.
MORE INFORMATION
================
Sample Code
-----------
/* Compile options needed: None
*/
template <class T>
class Base
{
public:
T data;
int i;
};
template <class T>
class Derived : public Base<T>
{
public:
int j;
};
template <class T>
void AFunction(Base<T>* b)
{
return;
}
void main()
{
// Uncomment one of the following two statements to work around the
// problem. If the template class definition is in a header file,
// you may want to include one of the following two statements at
// the end of that file.
// template Derived<int>;
// Derived<int> dummy;
Derived<int> *j;
AFunction(j); // Gives C2670 here
}
Additional query words: 4.00
======================================================================
Keywords : kbcode kbCompiler kbCPPonly kbVC
Technology : kbVCsearch kbAudDeveloper kbCVCComp
Version : winnt:
Issue type : kbbug
Solution Type : kbfix
=============================================================================