Ответ 1
После дальнейших исследований этой проблемы я хотел бы ответить на мой собственный вопрос. Спасибо @Justin и @MatteoItalia за проницательные комментарии. Короче говоря, это не ошибка, а скорее неопределенное поведение, поскольку VC++, похоже, соответствует стандарту для точки, в то время как другие компиляторы принимают вольности, чтобы интерпретировать его по-своему, потому что нет строгого руководства о том, как справляться с случаи delim == escape
, и этот абзац не объясняет это:
До тех пор, пока не будет достигнут невидимый символ delim или! In, извлеките символы из и добавьте их в s, за исключением того, что если побег будет достигнут, проигнорируйте его и добавьте следующий символ в s.
Это именно то, что происходит с VC++, первая двойная кавычка "
после того, как something
интерпретируется как неэкранированный символ delim, а не escape-символ, который завершает процедуру. ИМО нуждается в уточнении, что-то вроде: Если найден escape-символ, проверьте, за ним следует делимитный характер, и если да, отбросьте escape-символ. Вот оригинальное предложение, которое я думаю.
Я отправил отчет на трекер MS, но не очень надеюсь на исправление TBH. Затем я нашел этот билет, где @Barry предлагает использовать существующую реализацию здесь и здесь из GCC, и это именно то, что я сделал.
Это работает как ожидалось для меня, но если у вас есть какие-либо проблемы или предложения, пожалуйста, разделите.