如何在编译时测试libstdc ++的版本,而不是GCC?

时间:2015-07-19 22:28:26

标签: c++ gcc clang libstdc++

我正在尝试测试libstdc++的版本,因为在版本4.9.0之前与GCC一起分发的libstdc++版本中std::regex is implemented, but largely broken,

请注意:

是否有任何可移植的方法来测试不依赖于使用GCC编译器的libstdc++版本?

1 个答案:

答案 0 :(得分:-2)

在我看来,这个问题足够小,无法用蛮力来解决。

在名为machine.hpp或类似的头文件中,我会测试C ++标准的版本至少是我需要它的版本(__cplusplus宏)。然后我会添加各种宏检查以拒绝任何我知道有缺陷的库。

换句话说,我会采用黑名单方法而不是白名单方法。

例如:

#pragma once
#ifndef MACHINE_HPP_HEADER_GUARDS
#define MACHINE_HPP_HEADER_GUARDS

#if __cplusplus < 201103L
// Library is incompatible if it does not implement at least the C++11
// standard.
#error "I need a library that supports at least C++11."
#else
// Load an arbitrary header to ensure that the pre-processor macro is
// defined. Otherwise you will need to load this header AFTER you
// #include the header you care about.
#include <iosfwd>
#endif

#if __GLIBCXX__ == 20150422
#error "This version of GLIBCXX (20150422) has flaws in it"
#endif

// ...repeat for other versions of GLIBCXX that you know to be flawed

#endif // MACHINE_HPP_HEADER_GUARDS