From: Martin W. <mw...@ya...> - 2002-12-10 22:57:28
|
Joel de Guzman wrote: > ----- Original Message ----- > From: "Martin Wille" <mw...@ya...> [snip] >>>Nicola Musattiwrote: >>> >>> >>>>The Borland compilers issue a couple of warnings for the >>>>spirit/core/impl/primitives.ipp, which are caused by the fact that >>>>std::toupper() and std::tolower() return int's rather than char's. A >>>>possible patch is: >>>> >>>>88,89c88,89 >>>>< inline char tolower_(int c) { using namespace std; >>>>return tolower(c); } >>>>< inline char toupper_(int c) { using namespace std; >>>>return toupper(c); } >>>>--- >>>> > inline char tolower_(int c) { using namespace std; >>>>return static_cast<char>(tolower(c)); } >>>> > inline char toupper_(int c) { using namespace std; >>>>return static_cast<char>(toupper(c)); } [snip] >>Would >> >> template<typename CharT> inline CharT tolower_(CharT c) >> { >> using namespace std; >> return tolower(c); >> } >> >>work with all relevant compilers? > > > Hmmm, nice point! But the compiler would warn all over again if > we pass in a char and the library expects and returns an int. Yes, with broken libraries we will get these warnings. > Also, how shall we deal with wide chars? I see two ways to go: 1. Use what I proposed and add static_cast<CharT> to the return statement. 2. Use what we already have and add static_cast<char/wchar_t> to the return statements in primitives.ipp. The existing code uses overloading instead of templated functions in order to deal with non conformant libraries. This seems to work very well. I'd prefer the first solution if the second one wasn't already known to work as intended in all environments (except for the warnings). Actually, the problem with Nicola's code is that it uses int for the parameter type of the helper functions. Otherwise, Nicola's suggestions are the way to go. regards, m http://www.sold.com.au - SOLD.com.au - Find yourself a bargain! |