|
31
|
| Kirill V. Lyadvinsky · 技术社区 · 16 年前 |
|
|
1
15
Alexey Malistov给出的答案可以在MSVC上使用,只需稍作修改:
不幸的是
|
|
|
2
13
这可能有点晚了,但到目前为止,还没有一个C++11解决方案同时适用于完整和抽象类型。 那么,你来了。 对于VS2015(v140),g++>=4.8.1,叮当声>=3.4,这是有效的:
感谢Bat Ulzii Luvsanbat: https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ 使用VS2013(V120):
|
|
|
3
9
|
|
|
4
4
恐怕你不能实施这样的计划
在我的Mac上,使用G++4.0.1进行评估
所以,如果你尊重
ODR
不可能有
编辑:作为公认的答案,我自己破解了一个使用
|
|
|
5
2
解决这个问题需要在trait模板的默认参数中执行计算,因为试图更改模板的定义违反了ODR规则(尽管
这是用C++11编写的,但可以调整为在适度兼容C++11的编译器的C++03模式下工作。
但要注意,在模板中使用它几乎肯定会违反ODR。在不完整类型上实例化的模板与在完整类型上初始化的模板不能有任何不同。我个人只想要这个
顺便说一句,如果你想走另一条路,这个原则也可能有所帮助
implement
|
|
|
6
2
here 。我不会把它贴在下面,以免错误地获得赞誉。 |
|
|
7
1
我在标准中找不到任何东西可以保证不完整类型上的sizeof将产生0。然而,它确实要求,如果T在某个时候不完整,但在该翻译单元的稍后完成,则所有对T的引用都指向同一类型——因此,在我读到的时候,即使T在调用模板的地方不完整,如果T是在该翻译单元的某个地方完成的,也需要说它是完整的。 |
|
|
8
0
这是一个老问题,但所提出的答案对于某些类型(如函数引用类型或cv限定的函数类型)并不正确。
现在,这将适用于类函数类型。 |
|
9
0
|
|
|
Jacinto Resende · 模板类型扣除失败? 8 年前 |
|
|
themiurge · 基于条件的编译时类型选择的可变模板 8 年前 |
|
Tomilov Anatoliy · 可移动但不可复制 9 年前 |
|
|
0xbadf00d · 我的部分模板专用化的模板参数不可推断 10 年前 |
|
|
Milo Lu · 标签发送过程中发生错误 10 年前 |
|
|
Justin G · 如何使用类型特征仅比较类中具有多个参数的第一个模板参数? 10 年前 |
|
|
Jean-Simon Brochu · 如何确定指针转换将被偏移的编译时间 11 年前 |