为什么当模板参数是非POD时,boost变量抛出异常?

时间:2016-07-07 19:20:52

标签: c++ variant

对于POD甚至std :: string boost变量适用于我,但是当我尝试我的用户类型A时,它对此代码失败:

#include "stdafx.h"
#include <boost/variant/variant.hpp>
#include <boost/variant/get.hpp>

struct A
{
  char ch;
};

int main()
{
  boost::variant< int, A > n, a;
  n = 33;
  a = 'a';

  try
  {
    int nn = boost::get< int >( n ); // ok
    auto aa = boost::get< A >( a ); // throws bad_get
  }
  catch( boost::bad_get& )
  {
    bool okay = false;
  }

  return 0;
}

为什么?

1 个答案:

答案 0 :(得分:2)

您的第二个示例实际上包含另一个int,因为char可以转换为int。要从A构造char,您可以执行a = A{'a'};,它将调用您的类型的默认构造函数之一(可能是聚合初始化?我不确切知道)然后初始化你的variant A