On 1/6/2016 5:52 PM, Robert Ramey wrote:
I want to use Boost.Variant constexpr function. In order to do this it has to be a literal type - which apparently it isn't. The rule for being a literal type are summarized here:
http://en.cppreference.com/w/cpp/concept/LiteralType
a boost::variant isn't default constructable so it fails to qualify.
A default constructor is not a requirement of literal type.
Has anyone else had this problem before and managed to solve it in a convenient way?
Constexpr support is a complicated thing for `variant`, and it would require a complete reimplementation of `boost::variant`. The trickiest part is having a trivial destructor. For the gory details have a look at these articles: https://akrzemi1.wordpress.com/2012/12/13/constexpr-unions/ http://talesofcpp.fusionfenix.com/post-20/eggs.variant---part-ii-the-constex... Also note that literal unions are over restricted, and that restricts the kind of member types a literal variant might have. That's CWG2096 http://open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2096 Regards, -- Agustín K-ballo Bergé.- http://talesofcpp.fusionfenix.com