On Wed, Apr 11, 2012 at 11:48 AM, Florian Goujeon <florian.goujeon@42ndart.org> wrote:
On 04/09/2012 08:23 PM, Jeffrey Lee Hellrung, Jr. wrote:

c_fwd inherits from c, which is the variant<double,char*>  that pops up above. So yeah, there's definitely an ambiguity there.
Since boost.variant seems confused by this public inheritance,
I'll try to write a wrapper instead:

class my_type
{
   private:
       boost::variant<...>  impl_;

   public:
       //interface of impl_
};

It's too bad C++ doesn't ease such writtings.

Well, it kinda does: inheritance; but it doesn't let you disable the derived -> base conversion :/

does that help you diagnose the problem in any way?
It does. Thank you, Jeff!

Hmmm, okay, that's good 'cause I've since forgotten the problem :)

If you think some SFINAE trick can be used to disambiguate the constructor call, consider filing a trac ticket for Boost.Variant with this example. Or, if possible, an even simpler example, 'cause I remember finding even this stripped-down example hard to wrap my head around :/ And if you can provide a solution, even better! Again, I've since forgotten the problem, but I do remember that it wasn't immediately obvious to me whether this was a problem Boost.Variant should be able to handle or not.

- Jeff