std.variant 对大型类型的行为

Behavior of std.variant with large types

根据 docs:

You may want to use VariantN directly with a different maximum size [from Variant] either for storing larger types, or for saving memory.

我假设这意味着 Variant 不会接受大型结构,但以下通过:

struct S {
  long[2048] vals;
}

static assert(Variant.allowed!S);

那么,当我在标准 Variant 中粘贴像 S 这样的大字体时,究竟会发生什么? S 会自动装箱吗?

请注意 allowed 只检查类型列表,不检查大小。

但是对于一个大东西,它会被复制到堆中:variant.d 的源代码第 627 行显示了它。如果尺寸适合商店,它就存储在这里。否则,将创建堆副本并存储指向该副本的指针。

所以是的,它基本上是根据需要装箱的。