boost :: spirit :: karma Ausgabe des Strings in Anführungszeichen

Ich versuche, eine Zeichenfolge in Anführungszeichen mit boost :: spirit :: karma zu umgehen. Dies funktioniert gut, wenn es nur eine Zeichenfolge ist. Bei einer Zeichenfolge in einer boost :: -Variante in einem std :: -Vektor ist dies jedoch nicht der Fall. Nur das Drucken der Zeichenfolge funktioniert jedoch, ich verstehe nicht ganz warum.

Zeile (1) funktioniert gut, macht aber nicht das, was ich will. Zeile (2) sollte es tun, tut es aber nicht.

#include <iostream>
#include <string>
#include <boost/variant.hpp>
#include <boost/spirit/include/karma.hpp>
namespace karma = boost::spirit::karma;

typedef std::vector<boost::variant<int, std::string>> ParameterList;
typedef boost::variant<int, std::string, ParameterList> Parameter;

main()
{
    using karma::int_;
    using boost::spirit::ascii::string;
    using karma::eol;
    using karma::lit;

    std::string generated;
    std::back_insert_iterator<std::string> sink(generated);

    // (1)
    karma::rule<std::back_insert_iterator<std::string>, ParameterList()> parameterListRule = (int_ | string) % lit(", "); // This works!

    // (2)
    //karma::rule<std::back_insert_iterator<std::string>, ParameterList()> parameterListRule = (int_ | (lit('"') << string << lit('"'))) % lit(", "); // This does not work

    karma::rule<std::back_insert_iterator<std::string>, Parameter()> parameterRule = (int_ | (lit('"') << string << lit('"')) | parameterListRule) << eol; // This does work, even though it also escapes the string in a pair of quotation marks

    karma::generate(sink, parameterRule, 1); // Works
    karma::generate(sink, parameterRule, "foo"); // Works
    karma::generate(sink, parameterRule, Parameter(ParameterList{1, "foo"})); // Only works using rule (1), not with (2)
    std::cout << generated;
}