Archives
D Programming
DD.gnu digitalmars.D digitalmars.D.bugs digitalmars.D.dtl digitalmars.D.dwt digitalmars.D.announce digitalmars.D.learn digitalmars.D.debugger C/C++ Programming
c++c++.announce c++.atl c++.beta c++.chat c++.command-line c++.dos c++.dos.16-bits c++.dos.32-bits c++.idde c++.mfc c++.rtl c++.stl c++.stl.hp c++.stl.port c++.stl.sgi c++.stlsoft c++.windows c++.windows.16-bits c++.windows.32-bits c++.wxwindows digitalmars.empire digitalmars.DMDScript |
c++ - Bug: template explicit specialization with strcmp
#include <iostream> #include <cstring> // generic template definition template <typename T> T max( T t1, T t2 ) { return (t1 > t2 ? t1 : t2); } // const char* explicit specialization: // overrides instantiation from the generic template definition typedef const char *PCC; template<> PCC max( PCC s1, PCC s2 ) { return ( std::strcmp( s1, s2 ) > 0 ? s1 : s2 ); } int main() { // call to instantiation: int max< int >( int, int ); int i = max( 10, 5 ); // call to explicit specialization: // const char* max< const char* >( const char*, const char* ); const char *p = max( "hello", "world" ); std::cout << "i: " << i << " p: " << p << std::endl; return 0; } ******************** Should print: i: 10 p: world Instead print: i: 10 p: hello KTC -- Experience is a good school but the fees are high. - Heinrich Heine Apr 19 2005
The problem isn't with the templates, they work fine. The problem is the compiler assigns the type 'char*' to strings rather than 'const char*'. I'm not willing to fix this at the moment because it'll break an unknown amount of code. To workaround, create a specialization that works off of char*. Apr 22 2005
|