0
4

1 回答 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 回答