0

boost 变体的默认构造函数初始化第一个有界类型。我如何默认初始化除第一个成员之外的任何成员?一种选择是简单地分配正确类型的默认构造对象。但是,这不适用于某些类型,例如数组。没有初始化boost::get会抛出boost::bad_get异常。所以我不能std::copy在数组上做。

boost::variant<std:string, int[5]> v; // default initializes the string. 

我需要类似的东西

initialize<int[5]>(v);

在使用数组作为第一个有界类型时,我也遇到了编译问题。Clang 报错如下:

object expression of non-scalar type 'int [5]' cannot be used in a pseudo-destructor expression 
  operand.~T();

编辑:我对 boost.optional 有同样的问题。是否有默认初始化可选的 API?我的意思不是来自默认初始化 T 的赋值。

4

0 回答 0