开发者

Checking for availability of C++0x algorithm additions

I'm trying to figure out which of the additions to the algorithm headers are supported by a given implementation (gcc and MSVC would be enough).

The simple way would be to do it the same way as one would do it for core features: check the compiler version and define a macro if a language feature is supported. Unfortunately I cannot find a list that shows the version numbers for either compiler.

Is simply checking for a generic C++0x macro (GXX_EXPERIMENTAL or __cplusplus) enough or should I check 开发者_如何学Gothe change lists for the compilers and build my macros based on those lists?

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x


Since all compiler vendors provide a nice list of what's available in what version, and you would test the functionality anyways, I would use compiler versions to check for specific features. Or demand the user uses at least a good version, and not worry about it.

__cplusplus is not necessarily a C++0x macro, it tells you nothing. GXX_EXPERIMENTAL has existed since GCC 4.3, so that's pretty useless too.

  • This one is for GCC.

  • This one is for MSVC. (mind you: partially implemented means broken)

  • This one is for Intel.

Here you can find what macros to check against for a specific version of a compiler.


As far as I could figure out the only proper solution is to have a build script that tries to compile and run a file that uses the feature and has a runtime assertion. Depending on the outcome have a #define CONFIG_NO_FEATURENAME or similiar in a config file and guard your uses and workaround with a #ifndef.

This way it is possible to check if

  1. the feature is available
  2. the feature functions properly (depending on the correctness of the assertion)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜