Hello,

I'm writing a configuration file parser with boost::spirit, and have encountered some strange errors. The errors are:

1) error C2078: too many initializers (in file assign_actor.hpp, line 62)

2) error C2440: 'initializing' : cannot convert from 'const iterator_t ' to 'value_type' (in file assign_actor.hpp, line 62)

The line that's causing the error is identical (in concept) to the one above. Why is it generating an error? The code I'm using is below. Rule "two" is generating the error.

#include <iostream>
#include <boost/spirit.hpp>
using namespace std;

int main()
{
    using namespace boost::spirit;
    const int UnsignedCharacterMaximum = (numeric_limits<unsigned char>::max)();
    const int UnsignedShortMaximum = (numeric_limits<unsigned short>::max)();
    rule<> octet_p = limit_d(0, UnsignedCharacterMaximum)[int_p];
    rule<> ip_address_p = octet_p >> ch_p('.') >> octet_p >> ch_p('.') >> octet_p >> ch_p('.') >> octet_p;
    rule<> network_port_p = limit_d(0, UnsignedShortMaximum - 1)[int_p];

    string s;
    int i;
    rule<> one = ip_address_p[assign_a(s)];
    rule<> two = network_port_p[assign_a(i)]; // Commenting this line gets rid of the error.
    // But this line should work. It is identical (in conecpt) to the previous line.

    cout << parse("192.168.0.1", one).full << endl;

    return 0;
}