On 05/25/2011 01:21 AM, Jonathan Wakely wrote: > On 25 May 2011 09:19, Jonathan Wakely wrote: >> On 25 May 2011 07:44, Patrick Horgan wrote: >>> I'm using the following in a header that uses typeof and needs to build >>> in code that builds with -std=c++0x or the default -std=c++98. Can I >>> leave it and forget it, or will eventually the compiler's use of c++0x >>> features no longer be experimental? How do I future proof it? >>> >>> #ifdef __GXX_EXPERIMENTAL_CXX0X__ >>> #define typeof decltype >>> #endif >> Yes it will go away at some point. The portable way to detect C++0x support is: >> >> #if __cplusplus >= 201103L > Actually portable is the wrong word, since G++ doesn't actually > conform to that requirement - but it's the method specified by the > standard, so other compilers should conform to it and G++ should do > one day too. > Yeah, the current draft (N3242) has this: 16.8 Predefined macro names [cpp.predefined] 1 The following macro names shall be defined by the implementation: _ _ cplusplus The name _ _ cplusplus is defined to the value 201103L when compiling a C++ translation unit.155 155) It is intended that future versions of this standard will replace the value of this macro with a greater value. Non-conforming compilers should use a value with at most five decimal digits. right now gcc defines __cplusplus as 1, so maybe something like? #if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L #define typeof decltype #endif Patrick