如何测试标准库中是否定义了std :: remove_cvref?

时间:2019-07-17 09:21:02

标签: c++ c++-standard-library c++20

我在这里看不到任何类似于功能测试宏的内容: https://en.cppreference.com/w/cpp/utility/feature_test

原始文件中似乎都没有提及: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0550r2.pdf

测试__cplusplus也是不合适的,因为C ++ 20尚未发布,但该功能已经受支持。

功能测试宏支持是否可以在标准化过程中稍后出现,或者此添加量太小而不能成为功能测试宏的一部分,因此想要有条件地使用标准版本的人一定会回到老式的手动编译器版本检查中?

1 个答案:

答案 0 :(得分:1)

翻阅[tab:cpp.predefined.ft],我也看不到任何可能的相关信息。大概是因为此功能被认为是次要的,并且t自己很容易实现:

template <typename T>
struct remove_cvref :remove_cv<remove_reference_t<T>> {};

template <typename T>
using remove_cvref_t = typename remove_cvref<T>::type;

如果您只是想编写可移植的代码,则只需推出自己的版本即可。如果您真心地尝试检测此功能的可用性,则可能很遗憾必须诉诸“旧式手动编译器版本检查”。