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

标签 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 尚未发布,但此功能可能已经得到支持。

特性测试宏支持是否会在标准化过程中稍后出现,或者这个添加是否太小而无法成为特性测试宏的一部分,因此想要有条件地使用标准版本的人必然会回到旧学校手动编译器版本检查?

最佳答案

浏览[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;

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

关于c++ - 如何测试标准库中是否定义了 std::remove_cvref?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57072547/

相关文章:

c++ - 如何从 QFile 中获取字节数?

c++ - std::min_element 返回意外结果

C++20 范围 : reuse of a filter view

c++ - libstdc++对std::declval的实现问题

c++ - 概念要求中的析取

c# - Float epsilon 在 C++ 中不同于 C#

c++ - main.cpp :(. text+0x8f): 未定义对[对象方法]的引用

c++ - 带有 sys/select.h 宏的旧式转换警告

c++ - 当函数名称不带括号发送给cout时,编译器如何确定在运行时输出什么值? C++

c++ - Boost.Filesystem 和 C++ 标准文件系统库有多相似?