mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-17 10:59:39 +00:00
Fix compiple problem with C++11 compiler
This commit is contained in:
1 parent
f1f8ff53d5
commit
33dbe00cce
1 file changed
+12
-3
@@ -7951,10 +7951,19 @@ make_multipart_content_provider(const UploadFormDataItems &items,
|
|||||||
}
|
}
|
||||||
segs.push_back({owned.back().data(), owned.back().size()});
|
segs.push_back({owned.back().data(), owned.back().size()});
|
||||||
|
|
||||||
return [owned = std::move(owned), segs = std::move(segs)](
|
struct MultipartState {
|
||||||
size_t offset, size_t length, DataSink &sink) -> bool {
|
std::vector<std::string> owned;
|
||||||
|
std::vector<MultipartSegment> segs;
|
||||||
|
};
|
||||||
|
auto state = std::make_shared<MultipartState>();
|
||||||
|
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;
|
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
|
// Loop invariant: pos <= offset (proven by advancing pos only when
|
||||||
// offset - pos >= seg.size, i.e., the segment doesn't contain offset)
|
// offset - pos >= seg.size, i.e., the segment doesn't contain offset)
|
||||||
if (seg.size > 0 && offset - pos < seg.size) {
|
if (seg.size > 0 && offset - pos < seg.size) {
|
||||||
|
|||||||
Reference in new issue
Block a user