Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
API for Automatic Generator Creation

The library implements a special API returning a generator instance for a supplied attribute type. This function finds the best matching generator type for the attribute based on a set of simple matching rules (as outlined in the table below) applied recursively to the attribute type. The returned generator can be utilized to emit output for the provided attribute.

// forwards to <boost/spirit/home/karma/auto.hpp>
#include <boost/spirit/include/karma_auto.hpp>

Also, see Include Structure.





namespace boost { namespace spirit { namespace karma
    template <typename Attr>
    inline <unspecified>

The returned instance can be directly passed as the generator (or the delimiting generator) to any of the Spirit.Karma API functions. Additionally it can be assigned to a rule as the rules right hand side expression. This function will return a valid generator type only if the meta function traits::create_generator_exists returns mpl::true_. Otherwise it will fail compiling.

namespace boost { namespace spirit { namespace traits
    template <typename Attr>
    struct create_generator_exists;

The meta function evaluates to mpl::true_ if create_generator would return a valid generator for the given type Attr.

The following table outlines the mapping rules from the attribute type to the generator type. These rules are applied recursively to create the generator type which can be used to generate output from the given attribute type.

Attribute type

Generator type

char, wchar_t

standard::char_, standard_wide::char_

short, int, long

short_, int_, long_

unsigned short, unsigned int, unsigned long

ushort_, uint_, ulong_

float, double, long double

float_, double_, long_double

short, int, long

short_, int_, long_

long long, unsigned long long

long_long, ulong_long



Any string (char const*, std::string, etc.)


Any (STL) container

Kleene Star (unary '*')

Any Fusion sequence

Sequence operator ('<<')


Optional operator (unary '-')


Alternative operator ('|')

[Important] Important

The mapping for the generators long_long and ulong_long are only available on platforms where the preprocessor constant BOOST_HAS_LONG_LONG is defined (i.e. on platforms having native support for long long and unsigned long long (64 bit) signed and unsigned integer types).

Template parameters




An attribute type utilized to create the corresponding generator type from.