问问题
51 次
1 回答
1
我相信这两种情况下的行为都是未定义的。Dict2
只是偶然执行编译;“似乎有效”是未定义行为的一种可能表现形式。
[res.on.functions]/1在某些情况下(替换函数、处理函数、对用于实例化标准库模板组件的类型的操作),C++ 标准库依赖于 C++ 程序提供的组件。如果这些组件不满足其要求,则本国际标准对实施没有要求。
[res.on.functions]/2特别是,在以下情况下效果未定义:
...
(2.5) — 如果在实例化模板组件时将不完整类型 (6.9) 用作模板参数,除非特别允许对于那个组件。
Dict
并且Dict2
是不完整的类型,直到它们的定义的右括号。std::variant
不允许使用不完整的类型进行实例化。
于 2020-12-06T14:32:38.660 回答