Я декодирую bencode и имею некоторый код, который хорошо работает с gcc 4.4. Но будучи недавно обновлен до GCC 4.6 этот код больше не строит:Как сделать рекурсивный boost :: variant, который работает с 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
г ++ дает следующее сообщение об ошибке:
/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. Но у меня проблема с изменением: кто-нибудь знает, как это должно выглядеть с помощью обертки?