#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;
}