如何制作一个与gcc 4.6一起使用的递归boost :: variant?

时间:2012-02-12 20:50:51

标签: c++ boost boost-variant

我正在解码bencode,并且有一些代码适用于gcc 4.4。但是最近升级到gcc 4.6后,这段代码不再构建:

#ifndef BENCODE_VALUETYPES_H
#define BENCODE_VALUETYPES_H

#include <boost/variant.hpp>

#include <string>
#include <vector>
#include <map>

namespace bencode {

  typedef boost::make_recursive_variant<
    int,
    std::string,
    std::vector<boost::recursive_variant_>,
    std::map<std::string, boost::recursive_variant_> >::type Value;

  typedef std::map<std::string, Value> ValueDictionary;
  typedef std::vector<Value> ValueVector;

};

#endif

g ++提供了此错误消息:

/usr/include/c++/4.6/bits/stl_pair.h: In instantiation of 'std::pair<const std::basic_string<char>, boost::recursive_variant_>':
Decoder.cpp:97:39:   instantiated from here
/usr/include/c++/4.6/bits/stl_pair.h:93:11: error: 'std::pair<_T1, _T2>::second' has incomplete type
/usr/include/boost/variant/variant_fwd.hpp:232:12: error: forward declaration of 'struct boost::recursive_variant_'

最新升级版本的documentation(目前为1.48)表明“由于多个编译器中的标准一致性问题,make_recursive_variant不受普遍支持”,并且您应该使用recursive_wrapper。但我在改变时遇到了问题:有没有人知道使用包装器应该是什么样的?

1 个答案:

答案 0 :(得分:4)

在包含boost变体标题之前,请尝试在标题文件中定义以下内容。

#define BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT
#include <boost/variant.hpp>

我遇到了同样的问题,并在boost variant recursive

找到了解决方案