FIX: C2784 Instantiating STL Objects with a UDT Parameter (168078)
The information in this article applies to:
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
This article was previously published under Q168078 SYMPTOMS
When you attempt to instantiate an STL component for a class, a C2784 error
occurs, complaining that a relational operator (such as operator!= or
operator>) is not defined. This in spite of including "using namespace
std::rel_ops;", and defining operator< and operator== for the class.
CAUSE
The problem is caused by the nested namespace std::rel_ops. The compiler is
unable to do a proper name lookup for the generic relational operators
'!=', '<=', '>', '>=', which are defined in the namespace std::rel_ops and
are referenced by several STL components.
RESOLUTION
The easiest workaround is to add a using declaration for the specific
operator the compiler is complaining about. See the sections compiled
conditionally upon WORKAROUND in the sample code below.
STATUSMicrosoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article. This problem was corrected in Microsoft Visual C++ version 6.0.
Modification Type: | Major | Last Reviewed: | 10/24/2003 |
---|
Keywords: | kbBug kbfix kbVC600fix KB168078 |
---|
|