Is there a best practices using existing functionality to always avoid automatic dereference when comparing strings?
Clint On Thursday, March 21, 2013 02:56:51 PM David Cole wrote: > Unfortunately, this entire discussion nicely demonstrates and > reinforces my belief that we ought not to do this == thing... > > If Alex, Brad, Matthew and I can't understand each other's meanings > within the context of this discussion, what chance does a poor user > reading through the CMake IF documentation have of getting it right? > > Adding a new better way to do something without eliminating the old > not-so-good way of doing the same thing is not necessarily a good > thing. Multiple ways to do things just make people shake their heads > and ask "Why?" > > I am still voting no on this one. > > > David C. > > > -----Original Message----- > From: Alexander Neundorf <neund...@kde.org> > To: cmake-developers <cmake-developers@cmake.org> > Sent: Thu, Mar 21, 2013 2:43 pm > Subject: Re: [cmake-developers] if (FOO == BAR) ... > > On Thursday 21 March 2013, Matthew Woehlke wrote: > > On 2013-03-20 17:42, Alexander Neundorf wrote: > > > On Wednesday 20 March 2013, Matthew Woehlke wrote: > > >> On 2013-03-20 17:10, David Cole wrote: > > >>> Are you proposing that == behaves as STREQUAL, or as EQUAL? > > >> > > >> What's the difference? > > >> > > >> Okay, for <, >, there is an obvious answer, but for ==, I am > > trying and > > > >> failing to think of a situation where treating the arguments as > > numbers > > > >> would give a different result vs. treating them as strings. > > > > > > E.g. "0" vs. "0.0" > > > > Is "0.0" a floating-point number or a version string? In the context > > of > > > CMake, I would have rather expected it to be the latter. (Does CMake > > even understand floating point?) If '==' assumes numbers, how do I > > tell > > > it I really meant a version string? > > EQUAL tries to convert to double: > > if (argP1 != newArgs.end() && argP2 != newArgs.end() && > (*(argP1) == "LESS" || *(argP1) == "GREATER" || > *(argP1) == "EQUAL")) > { > def = cmIfCommand::GetVariableOrString(arg->c_str(), makefile); > def2 = cmIfCommand::GetVariableOrString((argP2)->c_str(), > makefile); > double lhs; > double rhs; > bool result; > if(sscanf(def, "%lg", &lhs) != 1 || > sscanf(def2, "%lg", &rhs) != 1) > > > My "==" implementation simply compares the strings on both sides in the > most > simple and straightforward way. > > > Alex > -- > > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Follow this link to subscribe/unsubscribe: > http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers > > > -- > > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Follow this link to subscribe/unsubscribe: > http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers -- Clinton Stimpson Elemental Technologies, Inc Computational Simulation Software, LLC www.csimsoft.com -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers