2017-07-06 3 views
1

folgenden Code nicht auf gcc 4.9.2 mit Boost 1.64 kompilieren:Kompilierung nicht für verschachtelten boost :: Variante der Fusionspaar

#include <boost/fusion/support/pair.hpp> 
#include <boost/mpl/int.hpp> 
#include <boost/variant.hpp> 

#include <string> 

namespace bf = boost::fusion; 
namespace bm = boost::mpl; 

int 
main(int argc, char** argv) 
{ 
    using L2_t = boost::variant<bf::pair<bm::int_<1>,char>>; 
    using L1_t = boost::variant<bf::pair<bm::int_<1>,L2_t>>; 
    L1_t result; 
} 

während ich denke, es legal ist.

Fehlermeldung beginnt mit:

/home/vagrant/.conan/data/boost/1.64.0/conaned/master/package/b06f2a498643ee1d889c6aea8e0e21d3cac9f57c/include/boost/fusion/support/pair.hpp: In instantiation of ‘constexpr boost::fusion::pai 
r<First, Second>::pair(const boost::fusion::pair<First, Second2>&) [with Second2 = boost::variant<boost::fusion::pair<mpl_::int_<1>, char> >; First = mpl_::int_<1>; Second = char]’:   /home/vagrant/.conan/data/boost/1.64.0/conaned/master/package/b06f2a498643ee1d889c6aea8e0e21d3cac9f57c/include/boost/type_traits/is_constructible.hpp:33:45: required by substitution of ‘tem 
plate<class T, class Arg, class> static boost::type_traits::yes_type boost::detail::is_constructible_imp::test1(int) [with T = boost::fusion::pair<mpl_::int_<1>, char>; Arg = const boost::fus 
ion::pair<mpl_::int_<1>, boost::variant<boost::fusion::pair<mpl_::int_<1>, char> > >&; <template-parameter-1-3> = <missing>]’ 

Compilation gelingt, wenn ich ein Paar Schlüsselwert ändern, um sie anders zu machen.

Wie löst man dieses Problem? Ich verwende diese Paarschlüsselwerte zum Serialisieren/Deserialisieren, daher ist es wichtig für mich, dieselben Werte auf verschiedenen Ebenen zu haben.

+1

Sieht aus wie es in gcc 5.2 funktioniert: https://wandbox.org/permlink/o4IpZbyohgECH7kO – xaxxon

+0

Richtig! Danke für die Erinnerung an Online-Compilation, ich habe es vergessen. Das war dumm, nicht nachzusehen. –

+0

Wenn Sie sich die Änderungsprotokolle ansehen (insbesondere welche Fehler behoben wurden), gibt es in den späten 4.9 und frühen 5.x Versionen viele C++ 11 Fehler. Auch einige fehlende Features werden noch implementiert. Danke, dass Sie ein vollständiges Beispiel gepostet haben, das das Kopieren/Einfügen in einen Online-Compiler trivial gemacht hat. – xaxxon

Antwort

1

Wie xaxxon sagte, funktioniert das ab gcc 5.2.

Verwandte Themen