--- Scott David Daniels <[EMAIL PROTECTED]> wrote: > Ralf W. Grosse-Kunstleve wrote: > > Thanks! This does the trick for me: > > > > #if PY_VERSION_HEX >= 0x02030000 > > PyObject_CallFunction( > > (PyObject*) &PyRange_Type, "lll", start, start+len*step, step) > > #else > > PyRange_New(start, len, step, 1) > > #endif > > > > I am compiling the code above with a C++ compiler (in the context of > > Boost.Python). Newer g++ versions unfortunatly produce a warning if -Wall > is > > specified: > > > > warning: dereferencing type-punned pointer will break strict-aliasing rules > > I am not sure about your compiler, but if I remember the standard > correctly, the following code shouldn't complain: > > PyObject_CallFunction((PyObject*) (void *) &PyRange_Type, > "lll", start, start+len*step, step)
Thanks for the suggestion! I just tried: g++ (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-20) g++ (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3) g++ (GCC) 4.0.0 20050519 (Red Hat 4.0.0-8) with -Wall -Wno-sign-compare. These compilers don't issue the "will break strict-aliasing rules" warning with or without the intermediate (void *). However, I also tried: g++ (GCC) 4.1.0 20060304 (Red Hat 4.1.0-3) which issues the warning without the (void *), but not with the (void *). I am not an expert of the C/C++ language details, but the intermediate cast seems to be a great local alternative to the global -fno-strict-aliasing flag. __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com