在type_traits中的std :: remove_const_reference之类的东西吗?

Is there something like std::remove_const_reference in type_traits

本文关键字:const traits type 中的 std remove reference      更新时间:2023-10-16

在std c 库中有一些能够修改类型的功能,例如 std::remove_referencestd::remove_cv。我想知道/为什么不存在类似std::remove_const_reference的东西,例如:

#include <iostream>
#include <type_traits>
template <typename T>
using remove_cref_t = typename std::remove_const<typename std::remove_reference<T>::type>::type;
template <typename T>
void linker_test_type();
int main() {
    using type = int volatile const&;
    test<remove_cref_t<type>>();
    return 0;
}

当然,预期的输出是:

undefined reference to `void linker_test_type<int volatile>()'

我在两年前在std-proposals中提到了这一点。老实说,我认为偶尔的用例不保证在我们可以通过撰写其他两个人来构建此特征时纳入标准。我们可以想到许多有用的特征,但是只能提供基本的构件,或者我们冒着用我们都不记得的特征污染图书馆的风险(这有点没用(。