[snip]I like this idea. I've gotten used to using template constraints and ranges when coding which matches this strategy naturally. A lot of the capabilities seem to match ranges, but why did you use different names for some of them?
removeBack : popBack removeFront: popFront pushBack : put pushFront : putFront?