我的目标是保证所有变种类型的单一存储:根据'never empty' guarantee from Boost::variant,我们需要覆盖
每个有界类型boost::has_nothrow_copy
。但是稍后
文档提到了有关'boost::blank'
的内容,如果有的话
type是绑定的,variant将设置该值而不是尝试nothrow
默认复制构造函数。
目前尚不清楚的是在有界类型列表中添加boost :: blank
将避免覆盖/专门化has_nothrow_copy
的要求
与其他类型?
答案 0 :(得分:5)
我相信这一点已经明确了。以下是增强文档中的相关部分:
因此,变体旨在实现以下优化 一旦满足其有界类型的以下标准:
对于每个有限类型T,它不是可复制构造的(如 由boost :: has_nothrow_copy指示,库保证变体 将仅使用T的单个存储和就地构造。
如果有的话 有界类型不是默认可构造的(如表示的那样) boost :: has_nothrow_constructor),库保证变量会 每个有界只使用单个存储和就地构造 键入变体。但请注意,如果分配 失败,未指定的nothrow默认可构造有界类型 将在左侧操作数中默认构造,以便 保留永不空虚的保证。
由于boost::blank
不是默认可构造的,因此第二个子句适用。并且听起来Boost已经特殊地选择了这个特定的类型,以便选择其他所有类型,因此,如果没有指定哪个默认的可构造类型将被实例化,那么类型保证为boost::blank
如果这是一个选项