BUG: C2784 Instantiating STL Objects With a UDT ParameterLast reviewed: May 21, 1997Article ID: Q168078 |
The information in this article applies to:
SYMPTOMSWhen 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.
CAUSEThe 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 andare referenced by several STL components.
RESOLUTIONThe 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 this to be a bug in the Microsoft products listed at the beginning of this article. We are researching this bug and will post new information here in the Microsoft Knowledge Base as it becomes available.
MORE INFORMATIONThe following sample demonstrates the problem.
Sample Code
/* Compile options: /GX */ #include <list> using namespace std ; using namespace std::rel_ops ; #ifdef WORKAROUND // define WORKAROUND to get around the error using std::rel_ops::operator!=; using std::rel_ops::operator>; #endif class X { int N; public: X(int n) : N(n) {} bool operator==(const X& b) const { return N == b.N; } bool operator<(const X& b) const { return N < b.N; } }; list <X> xList; int main() { return 0; } |
Keywords : CPPIss CPPLngIss kbtool STLIss vcbuglist500 kbbuglist
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |