
Hello, I'm modelizing a syntax tree using boost::variant, std::tuple and std::vector. This syntax tree has a lot of cyclic dependencies, so I have to use boost::recursive_wrapper along with forward declarations. I've encountered a case that my compiler (GCC 4.7) refuses to build. Here is the source code: http://pastebin.com/3a5xU06x (it's pretty short) Here is the compilation error message: http://pastebin.com/Zpa3TCp2 (Of course, reordering the declarations would solve the problem in this example, but it's not the point. This is a constraint I can't get rid of in my whole project.) The compiler complains about an ambiguous call of convert_construct() in Boost's source code, where a comment says: NOTE TO USER : Compile error here indicates that the given type is not unambiguously convertible to one of the variant's types (or that no conversion exists). c can be converted to boost::recursive_wrapper<c_fwd> though. Where is the ambiguity? I really don't know what to do. Help would be appreciated. Thank you.