【发布时间】:2015-09-21 12:07:54
【问题描述】:
例如,为了论证,我们假设找到了一个更有效的(存储,对它的操作)实现整数类型的向量(与通用向量实现相比)。符合标准的库可以执行以下操作:
template <class T, class A, class Enable = void>
class vector { ... };
template <class T>
class vector<T, A, std::enable_if_t<std::is_integral<T>::value>> { ... };
我认为由于额外的模板参数,这将是非法的。
但是一点编译器魔法呢:(除了额外的实现工作)是否允许这样的事情:
-
vector<integral_type, A>被内部映射 到class vector_integral<T, A>而 -
vector<anything_else, A>被内部映射到class vector<T, A>。
- 这显然与标准中明确提到的专业无关,例如std::vector<bool>
- 专业化显然具有相同的接口和可观察的行为。
- 让我们忽略concepts,因为它们还不是标准的。除非你有一些事实。
- 这是一个纯粹的学术问题(阅读个人好奇心)。
【问题讨论】:
标签: c++ language-lawyer standards-compliance c++-standard-library