`select parseDateTimeBestEffort('01/12/2017, 18:31:44')`

It is confused by a comma - should be easy to fix.
readDecimalNumber<2>(hour_or_day_of_month_or_month, digits);
                else if (num_digits == 1)   
                    readDecimalNumber<1>(hour_or_day_of_month_or_month, digits);
                else
                    return on_error("Cannot read DateTime: logical error, unexpected branch in code", ErrorCodes::LOGICAL_ERROR);
                if (checkChar(':', in))
                {
                    if (has_time)
                        return on_error("Cannot read DateTime: time component is duplicated", ErrorCodes::CANNOT_PARSE_DATETIME);
                    hour = hour_or_day_of_month_or_month;
                    has_time = true;
                    num_digits = readDigits(digits, sizeof(digits), in);
                    if (num_digits == 2)
                        readDecimalNumber<2>(minute, digits);
                    else if (num_digits == 1)
                        readDecimalNumber<1>(minute, digits);
                    else
                        return on_error("Cannot read DateTime: unexpected number of decimal digits after hour: " + toString(num_digits), ErrorCodes::CANNOT_PARSE_DATETIME);
                    if (checkChar(':', in))
                    {
                        num_digits = readDigits(digits, sizeof(digits), in);
                        if (num_digits == 2)
                            readDecimalNumber<2>(second, digits);
                        else if (num_digits == 1)
                            readDecimalNumber<1>(second, digits);
                        else
                            return on_error("Cannot read DateTime: unexpected number of decimal digits after hour and minute: " + toString(num_digits), ErrorCodes::CANNOT_PARSE_DATETIME);
                    }
                }
                else if (checkChar('/', in) || checkChar('.', in) || checkChar('-', in))