相关疑难解决方法(0)

std :: vector <T>是一个"用户定义的类型"吗?

当前草案的 17.6.4.2.1/1和17.6.4.2.1/2中,标准限制是针对用户注入的专业化namespace std.

如果C++程序向命名空间std或命名空间std中的命名空间添加声明或定义,则它是未定义的,除非另有说明.只有当声明取决于用户定义的类型 并且特化符合原始模板的标准库要求且未明确禁止时,程序才可以将任何标准库模板的模板特化添加到命名空间std .

我无法在标准中找到定义用户定义类型的短语.

我听说声称一个选项是一个类型,是不是std::is_fundamental是一个用户定义类型,在这种情况下std::vector<int>将是一个用户定义的类型.

另一种答案是用户定义的类型用户定义的类型.由于用户未定义std::vector<int>,并且std::vector<int>不依赖于用户定义的任何类型,std::vector<int>因此不是用户定义的类型.

一个实际的问题,这影响是"你可以注入一个专业化的std::hashstd::tuple<Ts...>namespace std如果能够这样做在一定程度上方便-另一种方法是创建另一个命名空间,我们递归构建我们的哈希std::tuple(可能还有其他类型的std没有hash支持),当且仅当我们无法在该命名空间中找到哈希时,我们才会重新开始std.

但是,如果这是合法的,那么如果标准hashstd::tupleto 添加了特殊化namespace std,那么专用它的代码就会被破坏,从而创建一个不再添加此类特化的理由.

虽然我所说的std::vector<int>是一个具体的例子,但我试图询问定义的类型std是否是用户定义的类型.次要问题是,就算没有,也许std::tuple<int>成为一个用户定义类型用户使用时(这得到滑:那么,什么会发生,如果里面的东西std定义std::tuple<int>,你局部专门hash为 …

c++ template-specialization language-lawyer c++11 c++14

40
推荐指数
3
解决办法
2513
查看次数