recursive_wrapper和不明确的convert_construct()

时间:2014-02-10 18:49:05

标签: c++ boost variant

你知道如何解决或解决这个问题吗?

http://boost.2283326.n4.nabble.com/Variant-recursive-wrapper-and-ambiguous-convert-construct-td4543139.html

#include <boost/variant.hpp>
class b_fwd;
typedef boost::variant<boost::recursive_wrapper<b_fwd> > a;
class c_fwd;
typedef boost::variant<boost::recursive_wrapper<c_fwd> > b;

struct b_fwd : b {
  // inherit constructors
  template <typename... Ts> b_fwd(Ts... o) : b(o...) {}
};

typedef boost::variant<double, char *> c;

struct c_fwd : c {
  // inherit constructors
  template <typename... Ts> c_fwd(Ts... o) : c(o...) {}
};

void f(const b &b_node) 
{
    a a_node(b_node); 
}

int main() 
{
}

1 个答案:

答案 0 :(得分:3)

我对GuyGreer的评论做出了预感。

如果问题是由变体可分配/可转换为变体引起的,那么我们可以通过使用第三个孤立的变体来消除歧义:

a a_node(boost::variant<b>(b_node)); 

瞧,顺势疗法似乎有效:)

查看 Live On Coliru

我不知道这个&#34;是否有效&#34; OP期望的意义上,因为,坦率地说,OP的代码对我来说是一个谜。

#include <boost/variant.hpp>
class b_fwd;
typedef boost::variant<boost::recursive_wrapper<b_fwd> > a;
class c_fwd;
typedef boost::variant<boost::recursive_wrapper<c_fwd> > b;

struct b_fwd : b {
    using b::b;
};

typedef boost::variant<double, char *> c;

struct c_fwd : c {
    using c::c;
};

void f(const b &b_node) 
{
    a a_node(boost::variant<b>(b_node)); 
}

int main() 
{
}