![]() |
1
4
假设我们只有一个翻译单元, [temp.point] 排除你的报价可能是形式不良的根源
相反,第一个片段的问题是 [temp.expl.spec]
第二个代码段格式良好,不要求模板参数具有完整的类型。
第三个片段格式错误,
然后是构造函数的定义 实例化,因此格式良好。 [temp.inst] 第四个代码段的格式不正确,因为成员需要具有完整的类型。 [class.mem]
|
![]() |
2
7
所以这是格式良好的;然而,这类东西仍然可以在您测试的每个编译器中中断(变成格式不良)而编译。 is_complete . 然后我们这样做:
我们没事,尽管如此: 因为该子句不适用于模板类。在这里,模板类的唯一实例化是好的。 现在,如果在另一个文件中有:
你的程序格式不正确。 但是,在一个文件案例中:
你的密码很好。有一个实例化点
一个和两个文件VrSOIN几乎肯定会编译在C++编译器中,没有错误或警告。
有些编译器甚至将模板实例化从一个编译单元存储到另一个编译单元;
最后,请注意
由
c++17
changed for
[vector.概述]/3
c++17语言
,大多数实现
这实际上妨碍了一些无用的代码,比如函数类型返回自己类型的向量 1 . Boost
身体
^^将无法编译一个不完整的
^^将编译,不会引起任何问题。
1 |
![]() |
3
1
幸运的是,这是一个很好的定义。出于完全相同的原因,这是一个明确的定义:
这是错误的:
|
![]() |
Robert E. Brown · 嵌套类的嵌套类的访问权限 7 年前 |
![]() |
YSC · 通过成员指针访问受保护的成员:这是黑客行为吗? 7 年前 |
![]() |
Swift - Friday Pie · 交换数学运算的阶 7 年前 |
![]() |
Acorn · Linux内核的\uu is\u constexpr宏 7 年前 |
![]() |
Acorn · 检测宏中的整数常量表达式 7 年前 |
![]() |
Petr Skocik · 兼容类型并忽略C类型系统中的顶级限定符 7 年前 |