在type_traits中是否有类似std :: remove_const_reference的东西

时间:2017-04-21 10:20:44

标签: c++ c++11 metaprogramming template-meta-programming typetraits

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>()'

1 个答案:

答案 0 :(得分:1)

我在std-proposals two years ago中提到了这一点。说实话,我不认为偶然的用例需要包含在标准中,因为我们可以通过组合其他两个来构建这个特征。我们可以想到许多有用的特性,但是只应该提供基本的构建块,或者我们冒着用我们无法记住的特征(这有点无用)污染库的风险。