```
#include <boost/parser/parser.hpp>
#include <iostream>
#include <string>
#include <variant>

namespace bp = boost::parser;

auto numeric_parser = bp::int_ | bp::double_;
//auto numeric_parser = bp::double_ | bp::int_;

void parse_number(const std::string& input)
{
    auto result = bp::parse(input, numeric_parser);
    if (result) {
        std::visit([](auto&& arg) {
            using T = std::decay_t<decltype(arg)>;
            if constexpr (std::is_same_v<T, int>)
                std::cout << "Integer: " << arg << std::endl;
            else if constexpr (std::is_same_v<T, double>)
                std::cout << "double: " << arg << std::endl;
            }, *result);
    }
    else {
        std::cout << "Parsing failed:" << " (" << input << ")" << std::endl;
    }
}
int main() {

    parse_number("24");
    parse_number("24.3");
    return 0;
}
```
Above code failed to parse "24.3" which makes me confused. First int should failed but why it didn't match double? If use 
```
auto numeric_parser = bp::double_ | bp::int_;
```
then all number parsed to double.