El Dijous, 22 de gener de 2015, a les 19:47:04, Adam Reichold va escriure: > Hello William, > > Am 22.01.2015 um 01:28 schrieb William Bader: > > Is it possible to write "const GBool sWords = > > flags.testFlag(WholeWords);" instead of "const GBool sWords = > > flags.testFlag(WholeWords) ? gTrue : gFalse;"? > > I think it is possible as the "bool" value returned by "testFlag" would > be casted implicitly to whatever integral type "GBool" could also be, > with "true" being 1 and "false" being "0" as mandated by the standard. > > > It does not give a compile warning with g++ 4.8.3 on Fedora 20, > > and goo/gtypes.h has "typedef bool GBool; #define gTrue true #define > > gFalse false". In theory, someone could change the definitions, but > > wouldn't it break a lot of tests if gTrue or gFalse were defined so that > > C++ considered (gFalse || !gTrue) as true in a condition? > > But I also think this only works if people always use statements like > "GBool x; if(x)" instead of testing "if(x == gTrue)" as "gTrue" could > very well be "42" instead of "1" and still keep "if(x)" and "gFalse || > !gTrue == false" working. So as it may be ugly and noisy, it does not > cost a lot to write "? gTrue : gFalse" and also cover this case. > > Personally, I would prefer to just use C++'s standard "bool" and my next > question would be what the actual contract behind "GBool" is? Is it > guaranteed to always be "bool"? But then why have it all?
see goo/gtypes.h We have it because xpdf had it, and it simplifies merging (btw 3.04 merging is still not even started, if anyone has time...). Cheers, Albert > > I this particular case, I just tried to stay as close to the existing > code as possible, so it may just be cargo culting. > > > William > > Best regards, Adam. > _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
