One of the early works in C++ related to task parallelism is the AT&T task library [20]. Early thread libraries in C++ include Presto [4] and the Brown thread library [7]. While these systems are shared memory implementations, the ACE system [18] is a pattern based [8, 5] C++ implementation for distributed systems. A recent compilation of articles [25] discusses a number of parallel C++ systems. Most of the systems discussed in the collection extend the C++ language to support parallelism. ABC++ and the Amelia vector library are two systems which provide parallelism within C++. ABC++ has the future abstraction but it does not take the generic programming paradigm approach. The Amelia vector library uses an STL-based mechanism to support reduction operations. Combining future abstractions and multi-threaded data parallel mechanisms with STL is novel to our work. The only other parallel library implementation that incorporates STL is the HPC++ implementation from Indiana University [3]. HPC++ does not support future mechanisms, but has a definition for data parallel algorithms using parallel iterators for an SPMD model and has a distributed memory flavor. Though the interfaces and the architecture focus of HPC++ and Coir<Futures> are different, the parallel iterators defined in HPC++ can be compared to our strategy classes and the iterators defined by the classes. Since SPMD programs typically assume the ``owner computes'' rule, the HPC++ parallel iterators are designed around data distributions, while - since we have an underlying MIMD paradigm and a shared memory architecture - our parallel iterators are designed around task distributions. Because massively parallel machines like the IBM SP/x are being designed using SMP nodes connected over distributed memory spaces, our abstractions can form the node component of the proposed HPC++ abstractions.