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的赋值。