id summary reporter owner description type status milestone component version severity resolution keywords cc 11110 ES identifier causes compilation failure in polygon/transform.hpp becase of Solaris bug Sergey.Sprogis@… Andrii Sydorchuk "1. Description of the failure. Several tests inside libs/geometry/test directory fail with Oracle Studio 12.4 C++ compiler on Solaris producing error message similar to this: CC -c -library=stlport4 -erroff=%none -KPIC -DBOOST_ALL_NO_LIB=1 -DNDEBUG -I. -I../../.. -I../../../boost/geometry/extensions/contrib/ttmath geometries/boost_polygon.cpp ""../../../boost/polygon/transform.hpp"", line 49: Error: Identifier expected instead of ""2"". 2. Cause of the failure. transform.hpp header is perfectly fine from user standpoint, and the failure is related to long-existing bug in all later Solaris versions. Basically, compilation of any C or C++ code will fail on Solaris if it will satisfy two conditions: - The presense of #include system header, direct or indirectly attached through other system headers from /usr/include directory. - The presence of identifires which accidentally coincide with X86 register names, like CS, DS, ES, ... Here is an example of such 2 lines code: #include void foo() { enum E { ES=2 }; } its compilation will produce error message similar to the one shown above. The failure occur because that sys/regset.h has the following macros: #define CS 15 #define DS 3 #define ES 2 and when compiler preprocesses sys/regset.h after that it automatically replaces user identifiers which accidentally have the same names with those numbers shown above. So, in the original libs/geometry/test/geometries/boost_polygon.cpp test has been attached indirectly through long chain of system headers defined inside STL library with the usage of -library=stlport4 option. So, when finally compiler preprocesses code from boost/polygon/transform.hpp shown below: enum ATR { ES = 2, EAST_SOUTH = 2, FLIP_Y = 2, // Line 49 it wrongly replaces ES with '2' assuming that it comes from macro defined inside sys/regset.h 3. Possible Solution. To replace ES identifier inside boost/polygon/transform.hpp with any other similar name, like for example E_S. And if it's not acceptable for every compiler, then please do it just for Oracle studio compiler like this: #if definde __SUNPRO_CC E_S = 2, EAST_SOUTH = 2, FLIP_Y = 2, #else ES = 2, EAST_SOUTH = 2, FLIP_Y = 2, #endif " Bugs closed Boost 1.58.0 polygon Boost 1.57.0 Problem fixed Aparna.Kumta@…