C++ 专门化std::decay有意义吗?
我有一个表示数组引用的类(C++ 专门化std::decay有意义吗?,c++,c++11,template-specialization,c++-standard-library,C++,C++11,Template Specialization,C++ Standard Library,我有一个表示数组引用的类(class array\u ref),还有一个表示数组引用的类(class array)。 array\u ref的行为类似于引用 将class array\u ref专门化为数组是否有意义 namespace std{ template<> class decay<arra_ref>{typedef array type;}; } 名称空间std{ 模板类{typedef数组类型;}; } 我必须告诉一般程序array是array\u re
class array\u ref
),还有一个表示数组引用的类(class array
)。
array\u ref
的行为类似于引用
将class array\u ref
专门化为数组是否有意义
namespace std{
template<> class decay<arra_ref>{typedef array type;};
}
名称空间std{
模板类{typedef数组类型;};
}
我必须告诉一般程序array
是array\u ref
的“值类型”,还有什么其他选择
std::decay
是否用于任何STL算法?标准库算法是否使用它并不重要。重要的是标准在[meta.type.synop]/1中所说的内容:
除非另有规定,否则为本子条款中定义的任何模板添加专门化的程序行为是未定义的
“此子类”中包括所有类型特征类,包括decay
。所以不要专门化它。从来没有。没有。衰变是C数组和函数的一个非常特殊的怪癖auto foo=obj
预计会将数组和函数衰减为指针和函数指针。你不能用你的数组\u ref
类型复制它。好的,谢谢。我认为应该有一个约定来获取其他类型的“值类型”,这些类型本身就是引用和“非值类型”。(见中的评论)