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

Pre*_*nik 9 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尚未发布,但该功能已经受支持。

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

L. *_* F. 1

浏览[tab:cpp.predefined.ft],我也没有看到任何可能与之相关的内容。大概是因为这个功能被认为是次要的,并且自己很容易实现:

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

template <typename T>
using remove_cvref_t = typename remove_cvref<T>::type;
Run Code Online (Sandbox Code Playgroud)

如果您只是想编写可移植代码,那么推出您自己的版本就足够了。不幸的是,如果您确实尝试检测此功能的可用性,则可能不得不求助于“老式手动编译器版本检查”。