#include <iostream>
#include <list>
#include <algorithm>
#include <future>
template<typename T>
struct chunk_to_sort{
std::list<T> data;
std::promise<std::list<T>> promise;
};
template<typename T>
std::list<T> sort(std::list<T> &chunk_data){
// <...>
std::list<T> result;
result.splice(result.begin(), chunk_data, chunk_data.begin());
T const &partition_val = *result.begin();
typename std::list<T>::iterator divide_point = std::partition(chunk_data.begin(),
chunk_data.end(), [&](T const &val){return val<partition_val;});
chunk_to_sort<T> new_lower_chunk;
new_lower_chunk.data.splice(new_lower_chunk.data.end(),
chunk_data, chunk_data.begin(), divide_point);
// <...>
}
int main() {
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1dHVyZT4KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBjaHVua190b19zb3J0ewoJc3RkOjpsaXN0PFQ+IGRhdGE7CglzdGQ6OnByb21pc2U8c3RkOjpsaXN0PFQ+PiBwcm9taXNlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RkOjpsaXN0PFQ+IHNvcnQoc3RkOjpsaXN0PFQ+ICZjaHVua19kYXRhKXsKCS8vIDwuLi4+CgkKCXN0ZDo6bGlzdDxUPiByZXN1bHQ7CglyZXN1bHQuc3BsaWNlKHJlc3VsdC5iZWdpbigpLCBjaHVua19kYXRhLCBjaHVua19kYXRhLmJlZ2luKCkpOwoJVCBjb25zdCAmcGFydGl0aW9uX3ZhbCA9ICpyZXN1bHQuYmVnaW4oKTsKCQoJdHlwZW5hbWUgc3RkOjpsaXN0PFQ+OjppdGVyYXRvciBkaXZpZGVfcG9pbnQgPSBzdGQ6OnBhcnRpdGlvbihjaHVua19kYXRhLmJlZ2luKCksIAoJCWNodW5rX2RhdGEuZW5kKCksIFsmXShUIGNvbnN0ICZ2YWwpe3JldHVybiB2YWw8cGFydGl0aW9uX3ZhbDt9KTsKCQoJY2h1bmtfdG9fc29ydDxUPiBuZXdfbG93ZXJfY2h1bms7CgluZXdfbG93ZXJfY2h1bmsuZGF0YS5zcGxpY2UobmV3X2xvd2VyX2NodW5rLmRhdGEuZW5kKCksIAoJCWNodW5rX2RhdGEsIGNodW5rX2RhdGEuYmVnaW4oKSwgZGl2aWRlX3BvaW50KTsKCQoJLy8gPC4uLj4KfQoKaW50IG1haW4oKSB7CgkKCXJldHVybiAwOwp9