Fil*_*poL 5 c++ types std-function
考虑这样的事情:
class A;
std::function<A(A)> f;
Run Code Online (Sandbox Code Playgroud)
显然,这是您要在程序中执行的操作。任何主要的编译器都可以毫无问题地接受它。
我的问题是:该标准在技术上允许吗?
如果我没看错的话
20.5.4.8其他功能
除非另有说明(并且不仅针对容器),否则禁止在实例化时使用不完整类型的模板参数。
在关于std::function或<functional>我没有看到允许这样做的参考部分。
有人知道这在标准中明确写在什么地方吗?
\n\n特别是,在以下情况下效果未定义:[...]
\n\n
\n- 如果在实例化模板组件或评估概念时使用不完整类型([basic.types])作为模板参数,除非该组件特别允许。
\n
由于[func.wrap.func]中没有任何内容覆盖这一点,因此具有不完整的函数类型是未定义的行为。
\n作为您需要在 [func.wrap.func] 中看到的内容的示例,让我们看一下[unique.ptr]/4
\n\n\n[...] unique_\xc2\xadptr 的模板参数 T 可能是不完整类型。
\n
这里明确指出允许不完整的类型。我们在 [func.wrap.func] 中需要类似的东西,但我们不需要,所以我们回到 [res.on.functions]/2 ,它是未定义的行为。
\n| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |