From 33dbe00cce793988c900fad2ee87997b1db34b22 Mon Sep 17 00:00:00 2001 From: yhirose Date: Sat, 21 Feb 2026 08:52:50 -0500 Subject: [PATCH] Fix compiple problem with C++11 compiler --- httplib.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/httplib.h b/httplib.h index a17629fd..91d1490d 100644 --- a/httplib.h +++ b/httplib.h @@ -7951,10 +7951,19 @@ make_multipart_content_provider(const UploadFormDataItems &items, } segs.push_back({owned.back().data(), owned.back().size()}); - return [owned = std::move(owned), segs = std::move(segs)]( - size_t offset, size_t length, DataSink &sink) -> bool { + struct MultipartState { + std::vector owned; + std::vector segs; + }; + auto state = std::make_shared(); + state->owned = std::move(owned); + // `segs` holds raw pointers into owned strings; std::string move preserves + // the data pointer, so these pointers remain valid after the move above. + state->segs = std::move(segs); + + return [state](size_t offset, size_t length, DataSink &sink) -> bool { size_t pos = 0; - for (const auto &seg : segs) { + for (const auto &seg : state->segs) { // Loop invariant: pos <= offset (proven by advancing pos only when // offset - pos >= seg.size, i.e., the segment doesn't contain offset) if (seg.size > 0 && offset - pos < seg.size) {