c++ - Error: ambiguous reference to symbol
- Alex Vinokur (40/40) Mar 18 2004 ===========================================
- Anton Sekeris (6/60) Mar 18 2004 Walter,
- Walter (10/50) Mar 18 2004 The problem is there's a template in std which matches the template you
- Alex Vinokur (8/11) Mar 18 2004 [snip]
- Walter (7/15) Mar 18 2004 news:c3du2o$4tn$2@digitaldaemon.com...
=========================================== Digital Mars C/C++ Compiler Version 8.40.2n =========================================== DMC has a problem with the following program. ====== C++ code : File foo.cpp : BEGIN ====== #include <string> using namespace std; template <class T> int operator!=(const T& x, const T& y) { return !(x == y); } int main () { const string str; return 0; } ====== C++ code : File foo.cpp : END ======== ====== Compilation : BEGIN ====== $ dmc -I. -IC:/dm/stlport/stlport foo.cpp C:/dm/stlport/stlport\stl/_algobase.c(221) : Error: ambiguous reference to symbol Had: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(234) : Error: ambiguous reference to symbol Had: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(235) : Error: ambiguous reference to symbol Had: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(240) : Error: ambiguous reference to symbol Had: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_string.c(392) : Error: ambiguous reference to symbol Fatal error: too many errors --- errorlevel 1 ====== Compilation : END ======== -- Alex Vinokur mailto:alexvn connect.to http://mathforum.org/library/view/10978.html
Mar 18 2004
Walter, Alex' problem might be stemming from the same issue as the one I reported in C++.beta under subject 'namespace bug?' on 2004/02/18. Kind regards, Anton Sekeris. Alex Vinokur wrote:=========================================== Digital Mars C/C++ Compiler Version 8.40.2n =========================================== DMC has a problem with the following program. ====== C++ code : File foo.cpp : BEGIN ====== #include <string> using namespace std; template <class T> int operator!=(const T& x, const T& y) { return !(x == y); } int main () { const string str; return 0; } ====== C++ code : File foo.cpp : END ======== ====== Compilation : BEGIN ====== $ dmc -I. -IC:/dm/stlport/stlport foo.cpp C:/dm/stlport/stlport\stl/_algobase.c(221) : Error: ambiguous reference to symbol Had: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(234) : Error: ambiguous reference to symbol Had: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(235) : Error: ambiguous reference to symbol Had: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(240) : Error: ambiguous reference to symbol Had: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_string.c(392) : Error: ambiguous reference to symbol Fatal error: too many errors --- errorlevel 1 ====== Compilation : END ======== -- Alex Vinokur mailto:alexvn connect.to http://mathforum.org/library/view/10978.html
Mar 18 2004
The problem is there's a template in std which matches the template you defined in the global namespace. By bringing std's symbol table into the global namespace, then there's a conflict. This is not a bug in DMC++. "Alex Vinokur" <alexvn connect.to> wrote in message news:c3c9cn$aov$1 digitaldaemon.com...=========================================== Digital Mars C/C++ Compiler Version 8.40.2n =========================================== DMC has a problem with the following program. ====== C++ code : File foo.cpp : BEGIN ====== #include <string> using namespace std; template <class T> int operator!=(const T& x, const T& y) { return !(x == y); } int main () { const string str; return 0; } ====== C++ code : File foo.cpp : END ======== ====== Compilation : BEGIN ====== $ dmc -I. -IC:/dm/stlport/stlport foo.cpp C:/dm/stlport/stlport\stl/_algobase.c(221) : Error: ambiguous reference tosymbolHad: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(234) : Error: ambiguous reference tosymbolHad: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(235) : Error: ambiguous reference tosymbolHad: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_algobase.c(240) : Error: ambiguous reference tosymbolHad: operator !=(const T&,const T&) and: std::operator !=(const _Tp&,const _Tp&) C:/dm/stlport/stlport\stl/_string.c(392) : Error: ambiguous reference tosymbolFatal error: too many errors --- errorlevel 1 ====== Compilation : END ======== -- Alex Vinokur mailto:alexvn connect.to http://mathforum.org/library/view/10978.html
Mar 18 2004
"Walter" <walter digitalmars.com> wrote in message news:c3du2o$4tn$2 digitaldaemon.com...The problem is there's a template in std which matches the template you defined in the global namespace. By bringing std's symbol table into the global namespace, then there's a conflict. This is not a bug in DMC++.[snip] So, what to do? P.S. GNU g++ 3.3.1, Microsoft C++ 13.00.9466, Borland C++ 5.5.1 have no problem with that code. -- Alex Vinokur mailto:alexvn connect.to http://mathforum.org/library/view/10978.html
Mar 18 2004
"Alex Vinokur" <alexvn connect.to> wrote in message news:c3e0io$a15$1 digitaldaemon.com..."Walter" <walter digitalmars.com> wrote in messagenews:c3du2o$4tn$2 digitaldaemon.com...Decide which version of the template you wish to use, and either delete the other one or turn off importing the namespace.The problem is there's a template in std which matches the template you defined in the global namespace. By bringing std's symbol table into the global namespace, then there's a conflict. This is not a bug in DMC++.[snip] So, what to do?P.S. GNU g++ 3.3.1, Microsoft C++ 13.00.9466, Borland C++ 5.5.1 have noproblem with that code. It's not the first time DMC++ is the only compiler that gets it right!
Mar 18 2004