编译时如何区分-std=c++17与-std=gnu++17?宏检查方案
判断g++是否原生支持__int128的std::limits适配的条件编译宏
- 你可以使用
__GLIBCXX_TYPE_INT_N_0这个宏作为判断条件。当g++在-std=gnu++17模式下原生支持__int128的std::limits适配时,该宏会被定义;而在-std=c++17模式下,这个宏未定义,此时你的适配头文件可以安全生效。 - 对应的条件编译代码写法:
#if !defined(__GLIBCXX_TYPE_INT_N_0) // 此处放置你的__int128的std::limits适配代码 #endif
- 补充说明:
__GLIBCXX_TYPE_INT_N_0是GNU libstdc++的内部宏,它的存在表示编译器已经为__int128提供了标准库的原生特化支持,此时再手动添加适配代码就会触发重复定义报错,用这个宏做判断刚好能规避该问题。
内容的提问来源于stack exchange,提问作者Alexis Wilke
相关产品推荐
相关产品推荐

