Pros:
- it is convenient to type and read numbers this way;
- Ada, Perl, C++, Go and Rust already support that;
- can support thousands as well as lakhs and crores;

Cons:
- standard SQL does not have this support;
- PostgreSQL treat `SELECT 1_000_000` as number one with `_000_000` alias: http://sqlfiddle.com/#!17/0a28f/400
- C++ has `1'000'000` instead of `1_000_000`;

What do you think?

return Token(TokenType::Semicolon, token_begin, ++pos);
        case '.':   
        {
            
            if (pos > begin
                && (!(pos + 1 < end && isNumericASCII(pos[1]))
                    || prev_significant_token_type == TokenType::ClosingRoundBracket
                    || prev_significant_token_type == TokenType::ClosingSquareBracket
                    || prev_significant_token_type == TokenType::BareWord
                    || prev_significant_token_type == TokenType::QuotedIdentifier
                    || prev_significant_token_type == TokenType::Number))
                return Token(TokenType::Dot, token_begin, ++pos);
            ++pos;
            while (pos < end && isNumericASCII(*pos))
                ++pos;
            
            if (pos + 1 < end && (*pos == 'e' || *pos == 'E'))
            {
                ++pos;
                
                if (pos + 1 < end && (*pos == '-' || *pos == '+'))
                    ++pos;
                while (pos < end && isNumericASCII(*pos))
                    ++pos;
            }
            return Token(TokenType::Number, token_begin, pos);
        }
        case '+':
            return Token(TokenType::Plus, token_begin, ++pos);
        case '-':