Index: doc/papers/general/Paper.tex
===================================================================
--- doc/papers/general/Paper.tex	(revision 3d8f2f86026604a24b204319c91718b436a6f37f)
+++ doc/papers/general/Paper.tex	(revision 8b001bdeaad8e72539cfc039fce69a37b18ee432)
@@ -2637,5 +2637,5 @@
 									& \CT{C}	& \CT{\CFA}	& \CT{\CC}	& \CT{\CCV}		\\ \hline
 maximum memory usage (MB)			& 10,001	& 2,502		& 2,503		& 11,253		\\
-source code size (lines)			& 197		& 186		& 125		& 293			\\
+source code size (lines)			& 197		& 186		& 133		& 303			\\
 redundant type annotations (lines)	& 27		& 0			& 2			& 16			\\
 binary size (KB)					& 14		& 257		& 14		& 37			\\
@@ -2906,54 +2906,4 @@
 }
 \end{cfa}
-
-\begin{comment}
-forall( otype T ) {
-	struct stack_node {
-		T value;
-		stack_node(T) * next;
-	};
-	struct stack { stack_node(T) * head; };
-	void clear( stack(T) & s ) with( s ) {
-		for ( stack_node(T) * next = head; next; ) {
-			stack_node(T) * crnt = next;
-			next = crnt->next;
-			^(*crnt){};
-			free(crnt);
-		}
-		head = 0;
-	}
-	void ?{}( stack(T) & s ) { (s.head){ 0 }; }
-	void ?{}( stack(T) & s, stack(T) t ) {
-		stack_node(T) ** crnt = &s.head;
-		for ( stack_node(T) * next = t.head; next; next = next->next ) {
-			*crnt = alloc();
-			((*crnt)->value){ next->value };
-			crnt = &(*crnt)->next;
-		}
-		*crnt = 0;
-	}
-	stack(T) ?=?( stack(T) & s, stack(T) t ) {
-		if ( s.head == t.head ) return s;
-		clear( s );
-		s{ t };
-		return s;
-	}
-	void ^?{}( stack(T) & s) { clear( s ); }
-	_Bool empty( const stack(T) & s ) { return s.head == 0; }
-	void push( stack(T) & s, T value ) with( s ) {
-		stack_node(T) * n = alloc();
-		(*n){ value, head };
-		head = n;
-	}
-	T pop( stack(T) & s ) with( s ) {
-		stack_node(T) * n = head;
-		head = n->next;
-		T v = n->value;
-		^(*n){};
-		free( n );
-		return v;
-	}
-}
-\end{comment}
 
 \medskip\noindent
@@ -2993,4 +2943,10 @@
 		return *this;
 	}
+	stack & operator= ( stack<T> && o ) {
+		if ( this == &o ) return *this;
+		head = o.head;
+		o.head = nullptr;
+		return *this;
+	}
 	bool empty() const { return head == nullptr; }
 	void push( const T & value ) { head = new node{ value, head };  /***/ }
@@ -3033,9 +2989,16 @@
 	stack() : head( nullptr ) {}
 	stack( const stack & o ) { copy( o ); }
+	stack( stack && o ) : head( o.head ) { o.head = nullptr; }
 	~stack() { clear(); }
-	stack & operator= ( const stack & o ) {
+	stack & operator=( const stack & o ) {
 		if ( this == &o ) return *this;
 		clear();
 		copy( o );
+		return *this;
+	}
+	stack & operator=( stack && o ) {
+		if ( this == &o ) return *this;
+		head = o.head;
+		o.head = nullptr;
 		return *this;
 	}
Index: doc/papers/general/evaluation/cpp-stack.hpp
===================================================================
--- doc/papers/general/evaluation/cpp-stack.hpp	(revision 3d8f2f86026604a24b204319c91718b436a6f37f)
+++ doc/papers/general/evaluation/cpp-stack.hpp	(revision 8b001bdeaad8e72539cfc039fce69a37b18ee432)
@@ -11,5 +11,5 @@
 
 	stack() : head( nullptr ) {}
-	stack( const stack<T> & o ) { copy( o ); }
+	stack( const stack<T> & o) { copy( o ); }
 	stack( stack<T> && o ) : head( o.head ) { o.head = nullptr; }
 
@@ -41,4 +41,11 @@
 	}
 
+	stack & operator= ( stack<T> && o ) {
+		if ( this == &o ) return *this;
+		head = o.head;
+		o.head = nullptr;
+		return *this;
+	}
+
 	bool empty() const { return head == nullptr; }
 
Index: doc/papers/general/evaluation/cpp-vstack.hpp
===================================================================
--- doc/papers/general/evaluation/cpp-vstack.hpp	(revision 3d8f2f86026604a24b204319c91718b436a6f37f)
+++ doc/papers/general/evaluation/cpp-vstack.hpp	(revision 8b001bdeaad8e72539cfc039fce69a37b18ee432)
@@ -17,6 +17,7 @@
 	stack( stack && o );
 	~stack();
-	stack & operator=( const stack& o );
-	stack & operator=( stack && o );
+	stack& operator=( const stack& o );
+	stack& operator=( stack && o );
+
 	bool empty() const;
 	void push( const object & value );
Index: doc/papers/general/evaluation/timing.dat
===================================================================
--- doc/papers/general/evaluation/timing.dat	(revision 3d8f2f86026604a24b204319c91718b436a6f37f)
+++ doc/papers/general/evaluation/timing.dat	(revision 8b001bdeaad8e72539cfc039fce69a37b18ee432)
@@ -1,9 +1,9 @@
 "400 million repetitions"	"C"	"\\CFA{}"	"\\CC{}"	"\\CC{obj}"
-"push\nint"	3002	2459	1542	3269
-"copy\nint"	2985	2057	1539	3083
-"clear\nint"	1374	827	756	1469
-"pop\nint"	1416	1221	760	5098
-"push\npair"	4214	2752	950	6873
-"copy\npair"	6127	2105	987	7293
-"clear\npair"	2881	885	751	3460
-"pop\npair"	3046	5434	822	24962
+"push\nint"	3002	2459	1520	3305
+"copy\nint"	2985	2057	1521	3152
+"clear\nint"	1374	827	718	1469
+"pop\nint"	1416	1221	717	5467
+"push\npair"	4214	2752	946	6826
+"copy\npair"	6127	2105	993	7330
+"clear\npair"	2881	885	711	3564
+"pop\npair"	3046	5434	783	26538
Index: doc/papers/general/evaluation/timing.gp
===================================================================
--- doc/papers/general/evaluation/timing.gp	(revision 3d8f2f86026604a24b204319c91718b436a6f37f)
+++ doc/papers/general/evaluation/timing.gp	(revision 8b001bdeaad8e72539cfc039fce69a37b18ee432)
@@ -24,5 +24,5 @@
 set yrange [0:10]
 
-set label "25.0" at 7.125,10.5
+set label "26.5" at 7.125,10.5
 
 # set datafile separator ","
