当在C中进行模板元编程时,我经常会碰到以下
内容:
template <typename T>
S<T> make_wrapper(T&& t) { return S<T>(std::forward<T>(t)); }
我知道我应该在返回类型中使用类似std :: decay的东西,但是为什么std :: remove_reference也不会工作呢?这有什么区别?那么std :: remove_cvref怎么样?
删除引用会留下const和volatile.如果这是你想要的,那就足够了.
删除cvref会执行大部分衰减,但不会将函数类型和数组类型转换为指针.
decay以一种方式转换类型,您可以将其副本合理地存储在数组或结构中,或者将其返回或传递给函数.