Index: libcfa/Makefile.in
===================================================================
--- libcfa/Makefile.in	(revision d0e8cfe465396db1841f617700bbcc5410b6175c)
+++ libcfa/Makefile.in	(revision 3848e0e8736f68e720b8e97d4e893bb0bb0aca6b)
@@ -13,9 +13,11 @@
 
 # make forward declarations for gcc builtins
-builtins.cf: builtins.c builtins.def
+builtins.cf: Makefile builtins.c builtins.def
 	@BACKEND_CC@ -E builtins.c | sed 's/"//g' > builtins.cf
 
 libcfa-prelude.c: ../translator/cfa-cpp prelude.cf builtins.cf
+	sed -i -e "s#typedef.*ptrdiff_t.*#`@BACKEND_CC@ -E ptrdiff_t.c | grep 'typedef.*ptrdiff_t'`#" prelude.cf
 	../translator/cfa-cpp -l prelude.cf $@
+	rm -f prelude.c
 
 libcfa-prelude.o: libcfa-prelude.c
@@ -32,3 +34,2 @@
 
 distclean: clean
-
Index: libcfa/prelude.cf
===================================================================
--- libcfa/prelude.cf	(revision d0e8cfe465396db1841f617700bbcc5410b6175c)
+++ libcfa/prelude.cf	(revision 3848e0e8736f68e720b8e97d4e893bb0bb0aca6b)
@@ -1,101 +1,111 @@
-/*	Standard Cforall Preample
- *
- *	Copyright 1994, 1999	Glen Ditchfield
- *
- */
-
-// #include <stddef.h>
-typedef long _ptrdiff_t;
-
-/*
- * Section 4.1 Primary Expressions
- */
+//                               -*- Mode: C -*- 
+// 
+// Copyright (C) Glen Ditchfield 1994, 1999
+// 
+// prelude.cf -- Standard Cforall Preample
+// 
+// Author           : Glen Ditchfield
+// Created On       : Sat Nov 29 07:23:41 2014
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Dec  2 09:25:31 2014
+// Update Count     : 20
+//
+
+// Following line added from stddef.h by build
+typedef long int ptrdiff_t;
+
+// Section numbers from: http://plg.uwaterloo.ca/~cforall/refrat.pdf
+
+// ------------------------------------------------------------
+//
+// Section 4.1 Primary Expressions
+//
+// ------------------------------------------------------------
+
 const int 0, 1;
-/*
-const int 0;
-*/
-forall (dtype DT) const DT* const 	0;
-forall (ftype FT) FT * const 		0;
-
-/*
- * ------------------------------------------------------------
- *
- * Section 4.2 Postfix Operators
- */
-
-int		?++( int *),		?--( int *);
-unsigned	?++( unsigned *),	?--( unsigned *);
-long		?++( long *),		?--( long *);
-long unsigned	?++( long unsigned *),	?--( long unsigned *);
-float		?++( float *),		?--( float *);
-double		?++( double *),		?--( double *);
-long double	?++( long double *),	?--( long double *);
-
-forall(type T)	T*			?++(               T**);
-forall(type T)	T*			?--(               T**);
-forall(type T)	const T*		?++(const          T**);
-forall(type T)	const T*		?--(const          T**);
-forall(type T)	volatile T*		?++(      volatile T**);
-forall(type T)	volatile T*		?--(      volatile T**);
-forall(type T)	const volatile T*	?++(const volatile T**);
-forall(type T)	const volatile T*	?--(const volatile T**);
-
-forall(type T) lvalue T			?[?](               T*,	_ptrdiff_t);
-forall(type T) const lvalue T		?[?](const          T*,	_ptrdiff_t);
-forall(type T) volatile lvalue T	?[?](      volatile T*,	_ptrdiff_t);
-forall(type T) const volatile lvalue T	?[?](const volatile T*,	_ptrdiff_t);
-forall(type T) lvalue T			?[?](_ptrdiff_t,	               T*);
-forall(type T) const lvalue T		?[?](_ptrdiff_t,	const          T*);
-forall(type T) volatile lvalue T	?[?](_ptrdiff_t,	      volatile T*);
-forall(type T) const volatile lvalue T	?[?](_ptrdiff_t,	const volatile T*);
-
-/*
- * ------------------------------------------------------------
- *
- * Section 4.3 Unary Operators
- */
-
-int		++?(int *), 		--?(int *);
-unsigned	++?(unsigned *), 	--?(unsigned *);
-long		++?(long *), 		--?(long *);
-long unsigned	++?(long unsigned *), 	--?(long unsigned *);
-float		++?(float *), 		--?(float *);
-double		++?(double *),		--?(double *);
-long double	++?(long double *), 	--?(long double *);
-
-forall(type T) T*			++?(               T**);
-forall(type T) T*			--?(               T**);
-forall(type T) const T*			++?(const          T**);
-forall(type T) const T* 		--?(const          T**);
-forall(type T) volatile T*		++?(      volatile T**);
-forall(type T) volatile T* 		--?(      volatile T**);
-forall(type T) const volatile T*	++?(const volatile T**);
-forall(type T) const volatile T* 	--?(const volatile T**);
-
-forall(type T) lvalue T			*?(                T* );
-forall(type T) const lvalue T		*?( const          T* );
-forall(type T) volatile lvalue T	*?(       volatile T* );
-forall(type T) const volatile lvalue T	*?( const volatile T* );
-forall(ftype FT) lvalue FT			*?( FT* );
-
-int 		+?(int), 		-?(int), 		~?(int);
-unsigned 	+?(unsigned), 		-?(unsigned),		~?(unsigned);
-unsigned long	+?(unsigned long),	-?(unsigned long),      ~?(unsigned long);
-long 		+?(long), 		-?(long), 		~?(long);
-float		+?(float), 		-?(float);
-double 		+?(double), 		-?(double);
-long double 	+?(long double),	-?(long double);
+
+forall ( dtype DT ) const DT * const 	0;
+forall ( ftype FT ) FT * const 		0;
+
+// ------------------------------------------------------------
+//
+// Section 4.2 Postfix Operators
+//
+// ------------------------------------------------------------
+
+int		?++( int * ),		 ?--( int * );
+unsigned	?++( unsigned * ),	 ?--( unsigned * );
+long		?++( long * ),		 ?--( long * );
+long unsigned	?++( long unsigned * ),	 ?--( long unsigned * );
+float		?++( float * ),		 ?--( float * );
+double		?++( double * ),	 ?--( double * );
+long double	?++( long double * ),	 ?--( long double * );
+
+forall( type T ) T *			 ?++(		     T ** );
+forall( type T ) T *			 ?--(		     T ** );
+forall( type T ) const T *		 ?++( const	     T ** );
+forall( type T ) const T *		 ?--( const	     T ** );
+forall( type T ) volatile T *		 ?++(	    volatile T ** );
+forall( type T ) volatile T *		 ?--(	    volatile T ** );
+forall( type T ) const volatile T *	 ?++( const volatile T ** );
+forall( type T ) const volatile T *	 ?--( const volatile T ** );
+
+forall( type T ) lvalue T		 ?[?](		      T *,	     ptrdiff_t );
+forall( type T ) const lvalue T		 ?[?]( const	      T *,	     ptrdiff_t );
+forall( type T ) volatile lvalue T	 ?[?](       volatile T *,	     ptrdiff_t );
+forall( type T ) const volatile lvalue T ?[?]( const volatile T *,	     ptrdiff_t );
+forall( type T ) lvalue T		 ?[?]( ptrdiff_t,     T * );
+forall( type T ) const lvalue T		 ?[?]( ptrdiff_t,    const	     T * );
+forall( type T ) volatile lvalue T	 ?[?]( ptrdiff_t,    volatile	     T * );
+forall( type T ) const volatile lvalue T ?[?]( ptrdiff_t,    const volatile  T * );
+
+// ------------------------------------------------------------
+//
+// Section 4.3 Unary Operators
+//
+// ------------------------------------------------------------
+
+int		++?( int * ), 		 --?( int * );
+unsigned	++?( unsigned * ), 	 --?( unsigned * );
+long		++?( long * ), 		 --?( long * );
+long unsigned	++?( long unsigned * ),  --?( long unsigned * );
+float		++?( float * ), 	 --?( float * );
+double		++?( double * ),	 --?( double * );
+long double	++?( long double * ), 	 --?( long double * );
+
+forall( type T ) T *			 ++?(		     T ** );
+forall( type T ) T *			 --?(		     T ** );
+forall( type T ) const T *		 ++?( const	     T ** );
+forall( type T ) const T * 		 --?( const	     T ** );
+forall( type T ) volatile T *		 ++?(	    volatile T ** );
+forall( type T ) volatile T * 		 --?(	    volatile T ** );
+forall( type T ) const volatile T *	 ++?( const volatile T ** );
+forall( type T ) const volatile T * 	 --?( const volatile T ** );
+
+forall( type T ) lvalue T		 *?(		     T * );
+forall( type T ) const lvalue T		 *?( const	     T * );
+forall( type T ) volatile lvalue T	 *?(       volatile  T * );
+forall( type T ) const volatile lvalue T *?( const volatile  T * );
+forall( ftype FT ) lvalue FT		 *?( FT * );
+
+int 		+?( int ), 		 -?( int ), 		~?( int );
+unsigned 	+?( unsigned ), 	 -?( unsigned ),	~?( unsigned );
+unsigned long	+?( unsigned long ),	 -?( unsigned long ),	~?( unsigned long );
+long 		+?( long ), 		 -?( long ), 		~?( long );
+float		+?( float ), 		 -?( float );
+double 		+?( double ), 		 -?( double );
+long double 	+?( long double ),	 -?( long double );
 
 int	!?( int ),	!?( unsigned ),	!?( long ),	!?( unsigned long ),
     	!?( float ),	!?( double );
 
-forall (dtype DT) int !?( const volatile DT* );
-forall (ftype FT) int !?( FT* );
-
-/*
- * ------------------------------------------------------------
- *
- * Section 4.5 Multiplicative Operators
- */
+forall ( dtype DT ) int !?( const volatile DT * );
+forall ( ftype FT ) int !?( FT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.5 Multiplicative Operators
+//
+// ------------------------------------------------------------
 
 int		?*?( int, int ),
@@ -117,115 +127,116 @@
 long double	?*?( long double, long double ),
     		?/?( long double, long double );
-/*
- * ------------------------------------------------------------
- *
- * Section 4.6 Additive Operators
- */
-
-int		?+?( int, int), 			?-?( int, int);
-long		?+?( long, long), 	 	  	?-?( long, long);
-unsigned	?+?( unsigned, unsigned), 	  	?-?( unsigned, unsigned);
-long unsigned	?+?( long unsigned, long unsigned), 	?-?( long unsigned, long unsigned);
-float		?+?( float, float), 		  	?-?( float, float);
-double		?+?( double, double), 		  	?-?( double, double);
-long double	?+?( long double, long double), 	?-?( long double, long double);
-
-forall(type T) T*	 		?+?(               T*,                       _ptrdiff_t);
-forall(type T) T*		        ?+?(               _ptrdiff_t,                T*);
-forall(type T) T*		        ?-?(               T*,                       _ptrdiff_t);
-forall(type T) const T*	 	        ?+?(const          T*,                       _ptrdiff_t);
-forall(type T) const T*			?+?(               _ptrdiff_t, const          T*);
-forall(type T) const T*			?-?(const          T*,                       _ptrdiff_t);
-forall(type T) volatile T*	 	?+?(      volatile T*,                       _ptrdiff_t);
-forall(type T) volatile T*		?+?(               _ptrdiff_t,       volatile T*);
-forall(type T) volatile T*		?-?(      volatile T*,                       _ptrdiff_t);
-forall(type T) const volatile T*	?+?(const volatile T*,                       _ptrdiff_t);
-forall(type T) const volatile T*        ?+?(               _ptrdiff_t, const volatile T*);
-forall(type T) const volatile T*        ?-?(const volatile T*, 	                   _ptrdiff_t);
-
-forall(type T) _ptrdiff_t	  ?-?(const volatile T*, const volatile T*);
-
-/*
- * ------------------------------------------------------------
- *
- * Section 4.7 Bitwise Shift Operators
- */
-
-int		?<<?(int, int), 			?>>?(int, int);
-long		?<<?(long, long), 			?>>?(long, long);
-unsigned	?<<?(unsigned, unsigned), 		?>>?(unsigned, unsigned);
-long unsigned	?<<?(long unsigned, long unsigned),	?>>?(long unsigned, long unsigned);
-
-/*
- * ------------------------------------------------------------
- *
- * Section 4.8 Relational Operators
- */
-
-int	?<?(int, int), 				?<=?(int, int),
-    	?>?(int, int), 				?>=?(int, int);
-int	?<?(long, long), 			?<=?(long, long),
-    	?>?(long, long), 			?>=?(long, long);
-int	?<?(unsigned, unsigned), 		?<=?(unsigned, unsigned),
-    	?>?(unsigned, unsigned), 		?>=?(unsigned, unsigned);
-int	?<?(unsigned long, unsigned long), 	?<=?(unsigned long, unsigned long),
-    	?>?(unsigned long, unsigned long), 	?>=?(unsigned long, unsigned long);
-int	?<?(float, float), 			?<=?(float, float),
-    	?>?(float, float), 			?>=?(float, float);
-int	?<?(double, double), 			?<=?(double, double),
-    	?>?(double, double), 			?>=?(double, double);
-int	?<?(long double, long double), 		?<=?(long double, long double),
-    	?>?(long double, long double), 		?>=?(long double, long double);
-
-forall(dtype DT) int ?<?( const volatile DT*, const volatile DT*);
-forall(dtype DT) int ?>?( const volatile DT*, const volatile DT*);
-forall(dtype DT) int ?<=?( const volatile DT*, const volatile DT*);
-forall(dtype DT) int ?>=?( const volatile DT*, const volatile DT*);
-
-/*
- * ------------------------------------------------------------
- *
- * Section 4.9 Equality Operators
- */
-
-int	?==?(int, int),				?!=?(int, int);
-int	?==?(long, long),			?!=?(long, long);
-int	?==?(unsigned, unsigned),		?!=?(unsigned, unsigned);
-int	?==?(unsigned long, unsigned long),	?!=?(unsigned long, unsigned long);
-int	?==?(float, float),			?!=?(float, float);
-int	?==?(double, double),			?!=?(double, double);
-int	?==?(long double, long double),		?!=?(long double, long double);
-
-forall(dtype DT) int ?==?(                DT*,                DT*);
-forall(dtype DT) int ?!=?(                DT*,                DT*);
-forall(dtype DT) int ?==?( const          DT*, const          DT*);
-forall(dtype DT) int ?!=?( const          DT*, const          DT*);
-forall(dtype DT) int ?==?(       volatile DT*,       volatile DT*);
-forall(dtype DT) int ?!=?(       volatile DT*,       volatile DT*);
-forall(dtype DT) int ?==?( const volatile DT*, const volatile DT*);
-forall(dtype DT) int ?!=?( const volatile DT*, const volatile DT*);
-forall(ftype FT) int ?==?( FT*, FT*);
-forall(ftype FT) int ?!=?( FT*, FT*);
-
-
-forall(dtype DT) int ?==?( const volatile DT*, const volatile void*);
-forall(dtype DT) int ?!=?( const volatile DT*, const volatile void*);
-forall(dtype DT) int ?==?( const volatile void*, const volatile DT*);
-forall(dtype DT) int ?!=?( const volatile void*, const volatile DT*);
-
-forall(dtype DT) int ?==?( const volatile DT*, forall(dtype DT2)const DT2*);
-forall(dtype DT) int ?!=?( const volatile DT*, forall(dtype DT2)const DT2*);
-forall(dtype DT) int ?==?( forall(dtype DT2)const DT2*, const volatile DT*);
-forall(dtype DT) int ?!=?( forall(dtype DT2)const DT2*, const volatile DT*);
-forall(ftype FT) int ?==?( FT*, forall(ftype FT2)FT2*);
-forall(ftype FT) int ?!=?( FT*, forall(ftype FT2)FT2*);
-forall(ftype FT) int ?==?( forall(ftype FT2)FT2*, FT*);
-forall(ftype FT) int ?!=?( forall(ftype FT2)FT2*, FT*);
-
-/*
- * ------------------------------------------------------------
- *
- * Section 4.10 Bitwise AND Operators
- */
+
+// ------------------------------------------------------------
+//
+// Section 4.6 Additive Operators
+//
+// ------------------------------------------------------------
+
+int		?+?( int, int ), 			?-?( int, int );
+long		?+?( long, long ), 	 	  	?-?( long, long );
+unsigned	?+?( unsigned, unsigned ), 	  	?-?( unsigned, unsigned );
+long unsigned	?+?( long unsigned, long unsigned ), 	?-?( long unsigned, long unsigned );
+float		?+?( float, float ), 		  	?-?( float, float );
+double		?+?( double, double ), 		  	?-?( double, double );
+long double	?+?( long double, long double ), 	?-?( long double, long double );
+
+forall( type T ) T *	 		?+?(		    T *,		       ptrdiff_t );
+forall( type T ) T *			?+?(	      ptrdiff_t,		       T * );
+forall( type T ) T *			?-?(		    T *,		       ptrdiff_t );
+forall( type T ) const T *		?+?( const	    T *,		       ptrdiff_t );
+forall( type T ) const T *		?+?(	      ptrdiff_t, const	       T * );
+forall( type T ) const T *		?-?( const	    T *,		       ptrdiff_t );
+forall( type T ) volatile T *		?+?(	   volatile T *,		       ptrdiff_t );
+forall( type T ) volatile T *		?+?(	      ptrdiff_t,	      volatile T * );
+forall( type T ) volatile T *		?-?(	   volatile T *,		       ptrdiff_t );
+forall( type T ) const volatile T *	?+?( const volatile T *,		       ptrdiff_t );
+forall( type T ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
+forall( type T ) const volatile T *	?-?( const volatile T *,		       ptrdiff_t );
+
+forall( type T ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
+
+// ------------------------------------------------------------
+//
+// Section 4.7 Bitwise Shift Operators
+//
+// ------------------------------------------------------------
+
+int		?<<?( int, int ), 			?>>?( int, int );
+long		?<<?( long, long ), 			?>>?( long, long );
+unsigned	?<<?( unsigned, unsigned ), 		?>>?( unsigned, unsigned );
+long unsigned	?<<?( long unsigned, long unsigned ),	?>>?( long unsigned, long unsigned );
+
+// ------------------------------------------------------------
+//
+// Section 4.8 Relational Operators
+//
+// ------------------------------------------------------------
+
+int	?<?( int, int ), 			?<=?( int, int ),
+    	?>?( int, int ), 			?>=?( int, int );
+int	?<?( long, long ), 			?<=?( long, long ),
+    	?>?( long, long ), 			?>=?( long, long );
+int	?<?( unsigned, unsigned ), 		?<=?( unsigned, unsigned ),
+    	?>?( unsigned, unsigned ), 		?>=?( unsigned, unsigned );
+int	?<?( unsigned long, unsigned long ), 	?<=?( unsigned long, unsigned long ),
+    	?>?( unsigned long, unsigned long ), 	?>=?( unsigned long, unsigned long );
+int	?<?( float, float ), 			?<=?( float, float ),
+    	?>?( float, float ), 			?>=?( float, float );
+int	?<?( double, double ), 			?<=?( double, double ),
+    	?>?( double, double ), 			?>=?( double, double );
+int	?<?( long double, long double ), 	?<=?( long double, long double ),
+    	?>?( long double, long double ), 	?>=?( long double, long double );
+
+forall( dtype DT ) int ?<?(  const volatile DT *, const volatile DT * );
+forall( dtype DT ) int ?>?(  const volatile DT *, const volatile DT * );
+forall( dtype DT ) int ?<=?( const volatile DT *, const volatile DT * );
+forall( dtype DT ) int ?>=?( const volatile DT *, const volatile DT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.9 Equality Operators
+//
+// ------------------------------------------------------------
+
+int	?==?( int, int ),			?!=?( int, int );
+int	?==?( long, long ),			?!=?( long, long );
+int	?==?( unsigned, unsigned ),		?!=?( unsigned, unsigned );
+int	?==?( unsigned long, unsigned long ),	?!=?( unsigned long, unsigned long );
+int	?==?( float, float ),			?!=?( float, float );
+int	?==?( double, double ),			?!=?( double, double );
+int	?==?( long double, long double ),	?!=?( long double, long double );
+
+forall( dtype DT ) int ?==?(		    DT *,		 DT * );
+forall( dtype DT ) int ?!=?(		    DT *,		 DT * );
+forall( dtype DT ) int ?==?( const	    DT *, const		 DT * );
+forall( dtype DT ) int ?!=?( const	    DT *, const		 DT * );
+forall( dtype DT ) int ?==?(       volatile DT *,       volatile DT * );
+forall( dtype DT ) int ?!=?(       volatile DT *,       volatile DT * );
+forall( dtype DT ) int ?==?( const volatile DT *, const volatile DT * );
+forall( dtype DT ) int ?!=?( const volatile DT *, const volatile DT * );
+forall( ftype FT ) int ?==?( FT *, FT * );
+forall( ftype FT ) int ?!=?( FT *, FT * );
+
+
+forall( dtype DT ) int ?==?( const volatile DT   *, const volatile void * );
+forall( dtype DT ) int ?!=?( const volatile DT   *, const volatile void * );
+forall( dtype DT ) int ?==?( const volatile void *, const volatile DT * );
+forall( dtype DT ) int ?!=?( const volatile void *, const volatile DT * );
+
+forall( dtype DT ) int ?==?( const volatile DT *, forall( dtype DT2 )const DT2 * );
+forall( dtype DT ) int ?!=?( const volatile DT *, forall( dtype DT2 )const DT2 * );
+forall( dtype DT ) int ?==?( forall( dtype DT2 )const DT2 *, const volatile DT * );
+forall( dtype DT ) int ?!=?( forall( dtype DT2 )const DT2 *, const volatile DT * );
+forall( ftype FT ) int ?==?( FT *, forall( ftype FT2 )FT2 * );
+forall( ftype FT ) int ?!=?( FT *, forall( ftype FT2 )FT2 * );
+forall( ftype FT ) int ?==?( forall( ftype FT2 )FT2 *, FT * );
+forall( ftype FT ) int ?!=?( forall( ftype FT2 )FT2 *, FT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.10 Bitwise AND Operators
+//
+// ------------------------------------------------------------
 
 int		?&?( int, int );
@@ -234,9 +245,9 @@
 unsigned long	?&?( unsigned long, unsigned long );
 
-/*
- * ------------------------------------------------------------
- *
- * Section 4.11 Bitwise XOR Operators
- */
+// ------------------------------------------------------------
+//
+// Section 4.11 Bitwise XOR Operators
+//
+// ------------------------------------------------------------
 
 int		?^?( int, int );
@@ -245,9 +256,9 @@
 unsigned long	?^?( unsigned long, unsigned long );
 
-/*
- * ------------------------------------------------------------
- *
- * Section 4.12 Bitwise OR Operators
- */
+// ------------------------------------------------------------
+//
+// Section 4.12 Bitwise OR Operators
+//
+// ------------------------------------------------------------
 
 int		?|?( int, int );
@@ -256,414 +267,426 @@
 unsigned long	?|?( unsigned long, unsigned long );
 
-/*
- * ------------------------------------------------------------
- *
- * Section 4.16 Assignment Operator
- */
-
-forall(ftype FT) FT*           ?=?(FT**, FT*);
-forall(ftype FT) FT*           ?=?(FT* volatile*, FT*);
-
-forall(dtype DT) DT* 		   	?=?(                DT *          *,          DT* );
-forall(dtype DT) DT* 		   	?=?(                DT * volatile *, 	             DT* );
-forall(dtype DT) const DT* 	   	?=?(const           DT *          *,                DT* );
-forall(dtype DT) const DT*	        ?=?(const           DT * volatile *,                DT* );
-forall(dtype DT) const DT*              ?=?(const           DT *          *, const          DT* );
-forall(dtype DT) const DT*              ?=?(const           DT * volatile *, const          DT* );
-forall(dtype DT) volatile DT* 	   	?=?(      volatile  DT *          *,                DT* );
-forall(dtype DT) volatile DT*           ?=?(      volatile  DT * volatile *,                DT* );
-forall(dtype DT) volatile DT*           ?=?(      volatile  DT *          *,       volatile DT* );
-forall(dtype DT) volatile DT*           ?=?(      volatile  DT * volatile *,       volatile DT* );
+// ------------------------------------------------------------
+//
+// Section 4.16 Assignment Operator
+//
+// ------------------------------------------------------------
+
+forall( ftype FT ) FT *			?=?( FT **, FT * );
+forall( ftype FT ) FT *			?=?( FT * volatile *, FT * );
+
+forall( dtype DT ) DT * 		?=?(		     DT *	   *,			DT * );
+forall( dtype DT ) DT * 		?=?(		     DT * volatile *, 			DT * );
+forall( dtype DT ) const DT * 	   	?=?( const	     DT *	   *,			DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile *,			DT * );
+forall( dtype DT ) const DT *	    	?=?( const	     DT *	   *, const		DT * );
+forall( dtype DT ) const DT *	   	?=?( const	     DT * volatile *, const		DT * );
+forall( dtype DT ) volatile DT * 	?=?(	   volatile  DT *	   *,			DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,			DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,	    volatile	DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,	    volatile	DT * );
 	
-forall(dtype DT) const volatile DT*	?=?(const volatile  DT *          *,                DT* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT * volatile *,                DT* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT *          *, const          DT* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT * volatile *, const          DT* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT *          *,       volatile DT* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT * volatile *,       volatile DT* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT *          *, const volatile DT* );
-forall(dtype DT) const volatile DT*    ?=?(const volatile  DT * volatile *, const volatile DT* );
-
-forall(dtype DT) DT* 		   	?=?(                DT *          *,          void* );
-forall(dtype DT) DT* 		   	?=?(                DT * volatile *, 	             void* );
-forall(dtype DT) const DT* 	   	?=?(const           DT *          *,                void* );
-forall(dtype DT) const DT*	        ?=?(const           DT * volatile *,                void* );
-forall(dtype DT) const DT*              ?=?(const           DT *          *, const          void* );
-forall(dtype DT) const DT*              ?=?(const           DT * volatile *, const          void* );
-forall(dtype DT) volatile DT* 	   	?=?(      volatile  DT *          *,                void* );
-forall(dtype DT) volatile DT*           ?=?(      volatile  DT * volatile *,                void* );
-forall(dtype DT) volatile DT*           ?=?(      volatile  DT *          *,       volatile void* );
-forall(dtype DT) volatile DT*           ?=?(      volatile  DT * volatile *,       volatile void* );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,			DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *,			DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *, const		DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *, const		DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *,	    volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *,	    volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   *, const volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile *, const volatile	DT * );
+
+forall( dtype DT ) DT * 		?=?(		     DT *	   *,			void * );
+forall( dtype DT ) DT * 		?=?(		     DT * volatile *, 			void * );
+forall( dtype DT ) const DT *		?=?( const	     DT *	   *,			void * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile *,			void * );
+forall( dtype DT ) const DT *		?=?( const	     DT *	   *, const		void * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile *, const	  	void * );
+forall( dtype DT ) volatile DT * 	?=?(	   volatile  DT *	   *,			void * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,			void * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   *,	    volatile	void * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile *,	    volatile	void * );
 	
-forall(dtype DT) const volatile DT*	?=?(const volatile  DT *          *,                void* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT * volatile *,                void* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT *          *, const          void* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT * volatile *, const          void* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT *          *,       volatile void* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT * volatile *,       volatile void* );
-forall(dtype DT) const volatile DT*     ?=?(const volatile  DT *          *, const volatile void* );
-forall(dtype DT) const volatile DT*    ?=?(const volatile  DT * volatile *, const volatile void* );
-
-	
-forall(dtype DT) void *		   ?=?(               void *          *,                DT*);
-forall(dtype DT) void *            ?=?(               void * volatile *,                DT*);
-forall(dtype DT) const void *	   ?=?(const          void *          *,                DT*);
-forall(dtype DT) const void *      ?=?(const          void * volatile *,                DT*);
-forall(dtype DT) const void *      ?=?(const          void *          *, const          DT*);
-forall(dtype DT) const void *      ?=?(const          void * volatile *, const          DT*);
-forall(dtype DT) volatile void *   ?=?(      volatile void *          *,                DT*);
-forall(dtype DT) volatile void *   ?=?(      volatile void * volatile *,                DT*);
-forall(dtype DT) volatile void *   ?=?(      volatile void *          *,       volatile DT*);
-forall(dtype DT) volatile void *   ?=?(      volatile void * volatile *,       volatile DT*);
-forall(dtype DT) const volatile void *   ?=?(const volatile void *          *,                DT*);
-forall(dtype DT) const volatile void *   ?=?(const volatile void * volatile *,                DT*);
-forall(dtype DT) const volatile void *   ?=?(const volatile void *          *, const          DT*);
-forall(dtype DT) const volatile void *   ?=?(const volatile void * volatile *, const          DT*);
-forall(dtype DT) const volatile void *   ?=?(const volatile void *          *,       volatile DT*);
-forall(dtype DT) const volatile void *   ?=?(const volatile void * volatile *,       volatile DT*);
-forall(dtype DT) const volatile void *   ?=?(const volatile void *          *, const volatile DT*);
-forall(dtype DT) const volatile void *   ?=?(const volatile void * volatile *, const volatile DT*);
-
-void *		  ?=?(               void *          *,                void*);
-void *            ?=?(               void * volatile *,                void*);
-const void *	  ?=?(const          void *          *,                void*);
-const void *      ?=?(const          void * volatile *,                void*);
-const void *      ?=?(const          void *          *, const          void*);
-const void *      ?=?(const          void * volatile *, const          void*);
-volatile void *   ?=?(      volatile void *          *,                void*);
-volatile void *   ?=?(      volatile void * volatile *,                void*);
-volatile void *   ?=?(      volatile void *          *,       volatile void*);
-volatile void *   ?=?(      volatile void * volatile *,       volatile void*);
-const volatile void *   ?=?(const volatile void *          *,                void*);
-const volatile void *   ?=?(const volatile void * volatile *,                void*);
-const volatile void *   ?=?(const volatile void *          *, const          void*);
-const volatile void *   ?=?(const volatile void * volatile *, const          void*);
-const volatile void *   ?=?(const volatile void *          *,       volatile void*);
-const volatile void *   ?=?(const volatile void * volatile *,       volatile void*);
-const volatile void *   ?=?(const volatile void *          *, const volatile void*);
-const volatile void *   ?=?(const volatile void * volatile *, const volatile void*);
-
-forall(dtype DT) DT*		   ?=?(               DT *          *, forall(dtype DT2) const DT2*);
-forall(dtype DT) DT*               ?=?(               DT * volatile *, forall(dtype DT2) const DT2*);
-forall(dtype DT) const DT*	   ?=?(const          DT *          *, forall(dtype DT2) const DT2*);
-forall(dtype DT) const DT*         ?=?(const          DT * volatile *, forall(dtype DT2) const DT2*);
-forall(dtype DT) volatile DT*	   ?=?(      volatile DT *          *, forall(dtype DT2) const DT2*);
-forall(dtype DT) volatile DT*      ?=?(      volatile DT * volatile *, forall(dtype DT2) const DT2*);
-forall(dtype DT) const volatile DT* ?=?(const volatile DT *          *, forall(dtype DT2) const DT2*);
-forall(dtype DT) const volatile DT* ?=?(const volatile DT * volatile *, forall(dtype DT2) const DT2*);
-
-forall(ftype FT) FT* 		   ?=?( FT *          *, forall(ftype FT2)FT2*);
-forall(ftype FT) FT*               ?=?( FT * volatile *, forall(ftype FT2)FT2*);
-
-forall(type T) T* 		   ?+=?(                T *          *, _ptrdiff_t);
-forall(type T) T*                  ?+=?(                T * volatile *, _ptrdiff_t);
-forall(type T) T*                  ?-=?(                T *          *, _ptrdiff_t);
-forall(type T) T*                  ?-=?(                T * volatile *, _ptrdiff_t);
-forall(type T) const T* 	   ?+=?( const          T *          *, _ptrdiff_t);
-forall(type T) const T*            ?+=?( const          T * volatile *, _ptrdiff_t);
-forall(type T) const T*            ?-=?( const          T *          *, _ptrdiff_t);
-forall(type T) const T*            ?-=?( const          T * volatile *, _ptrdiff_t);
-forall(type T) volatile T*	   ?+=?(       volatile T *          *, _ptrdiff_t);
-forall(type T) volatile T*         ?+=?(       volatile T * volatile *, _ptrdiff_t);
-forall(type T) volatile T*         ?-=?(       volatile T *          *, _ptrdiff_t);
-forall(type T) volatile T*         ?-=?(       volatile T * volatile *, _ptrdiff_t);
-forall(type T) const volatile T*   ?+=?( const volatile T *          *, _ptrdiff_t);
-forall(type T) const volatile T*   ?+=?( const volatile T * volatile *, _ptrdiff_t);
-forall(type T) const volatile T*   ?-=?( const volatile T *          *, _ptrdiff_t);
-forall(type T) const volatile T*   ?-=?( const volatile T * volatile *, _ptrdiff_t);
-
-
-char			?=?(         char*, char),
-    			?=?(volatile char*, char);
-signed char		?=?(         signed char*, signed char),
-    			?=?(volatile signed char*, signed char);
-unsigned char		?=?(         unsigned char*, unsigned char),
-    			?=?(volatile unsigned char*, unsigned char);
-short			?=?(         short*, short),
-    			?=?(volatile short*, short);
-unsigned short		?=?(         unsigned short*, unsigned short),
-    			?=?(volatile unsigned short*, unsigned short);
-int			?=?(         int*, int),
-    			?=?(volatile int*, int);
-unsigned		?=?(         unsigned*, unsigned),
-    			?=?(volatile unsigned*, unsigned);
-long			?=?(         long*, long),
-    			?=?(volatile long*, long);
-unsigned long		?=?(         unsigned long*, unsigned long),
-    			?=?(volatile unsigned long*, unsigned long);
-long long			?=?(         long long*, long long),
-    			?=?(volatile long long*, long long);
-unsigned long long		?=?(         unsigned long long*, unsigned long long),
-    			?=?(volatile unsigned long long*, unsigned long long);
-
-char			?*=?(         char*, char),
-    			?*=?(volatile char*, char);
-signed char		?*=?(         signed char*, signed char),
-    			?*=?(volatile signed char*, signed char);
-unsigned char		?*=?(         unsigned char*, unsigned char),
-    			?*=?(volatile unsigned char*, unsigned char);
-short			?*=?(         short*, short),
-    			?*=?(volatile short*, short);
-unsigned short		?*=?(         unsigned short*, unsigned short),
-    			?*=?(volatile unsigned short*, unsigned short);
-int			?*=?(         int*, int),
-    			?*=?(volatile int*, int);
-unsigned		?*=?(         unsigned*, unsigned),
-    			?*=?(volatile unsigned*, unsigned);
-long			?*=?(         long*, long),
-    			?*=?(volatile long*, long);
-unsigned long		?*=?(         unsigned long*, unsigned long),
-    			?*=?(volatile unsigned long*, unsigned long);
-long long			?*=?(         long long*, long long),
-    			?*=?(volatile long long*, long long);
-unsigned long long		?*=?(         unsigned long long*, unsigned long long),
-    			?*=?(volatile unsigned long long*, unsigned long long);
-
-char			?/=?(         char*, char),
-    			?/=?(volatile char*, char);
-signed char		?/=?(         signed char*, signed char),
-    			?/=?(volatile signed char*, signed char);
-unsigned char		?/=?(         unsigned char*, unsigned char),
-    			?/=?(volatile unsigned char*, unsigned char);
-short			?/=?(         short*, short),
-    			?/=?(volatile short*, short);
-unsigned short		?/=?(         unsigned short*, unsigned short),
-    			?/=?(volatile unsigned short*, unsigned short);
-int			?/=?(         int*, int),
-    			?/=?(volatile int*, int);
-unsigned		?/=?(         unsigned*, unsigned),
-    			?/=?(volatile unsigned*, unsigned);
-long			?/=?(         long*, long),
-    			?/=?(volatile long*, long);
-unsigned long		?/=?(         unsigned long*, unsigned long),
-    			?/=?(volatile unsigned long*, unsigned long);
-long long			?/=?(         long long*, long long),
-    			?/=?(volatile long long*, long long);
-unsigned long long		?/=?(         unsigned long long*, unsigned long long),
-    			?/=?(volatile unsigned long long*, unsigned long long);
-
-char			?%=?(         char*, char),
-    			?%=?(volatile char*, char);
-signed char		?%=?(         signed char*, signed char),
-    			?%=?(volatile signed char*, signed char);
-unsigned char		?%=?(         unsigned char*, unsigned char),
-    			?%=?(volatile unsigned char*, unsigned char);
-short			?%=?(         short*, short),
-    			?%=?(volatile short*, short);
-unsigned short		?%=?(         unsigned short*, unsigned short),
-    			?%=?(volatile unsigned short*, unsigned short);
-int			?%=?(         int*, int),
-    			?%=?(volatile int*, int);
-unsigned		?%=?(         unsigned*, unsigned),
-    			?%=?(volatile unsigned*, unsigned);
-long			?%=?(         long*, long),
-    			?%=?(volatile long*, long);
-unsigned long		?%=?(         unsigned long*, unsigned long),
-    			?%=?(volatile unsigned long*, unsigned long);
-long long			?%=?(         long long*, long long),
-    			?%=?(volatile long long*, long long);
-unsigned long long		?%=?(         unsigned long long*, unsigned long long),
-    			?%=?(volatile unsigned long long*, unsigned long long);
-
-char			?+=?(         char*, char),
-    			?+=?(volatile char*, char);
-signed char		?+=?(         signed char*, signed char),
-    			?+=?(volatile signed char*, signed char);
-unsigned char		?+=?(         unsigned char*, unsigned char),
-    			?+=?(volatile unsigned char*, unsigned char);
-short			?+=?(         short*, short),
-    			?+=?(volatile short*, short);
-unsigned short		?+=?(         unsigned short*, unsigned short),
-    			?+=?(volatile unsigned short*, unsigned short);
-int			?+=?(         int*, int),
-    			?+=?(volatile int*, int);
-unsigned		?+=?(         unsigned*, unsigned),
-    			?+=?(volatile unsigned*, unsigned);
-long			?+=?(         long*, long),
-    			?+=?(volatile long*, long);
-unsigned long		?+=?(         unsigned long*, unsigned long),
-    			?+=?(volatile unsigned long*, unsigned long);
-long long			?+=?(         long long*, long long),
-    			?+=?(volatile long long*, long long);
-unsigned long long		?+=?(         unsigned long long*, unsigned long long),
-    			?+=?(volatile unsigned long long*, unsigned long long);
-
-char			?-=?(         char*, char),
-    			?-=?(volatile char*, char);
-signed char		?-=?(         signed char*, signed char),
-    			?-=?(volatile signed char*, signed char);
-unsigned char		?-=?(         unsigned char*, unsigned char),
-    			?-=?(volatile unsigned char*, unsigned char);
-short			?-=?(         short*, short),
-    			?-=?(volatile short*, short);
-unsigned short		?-=?(         unsigned short*, unsigned short),
-    			?-=?(volatile unsigned short*, unsigned short);
-int			?-=?(         int*, int),
-    			?-=?(volatile int*, int);
-unsigned		?-=?(         unsigned*, unsigned),
-    			?-=?(volatile unsigned*, unsigned);
-long			?-=?(         long*, long),
-    			?-=?(volatile long*, long);
-unsigned long		?-=?(         unsigned long*, unsigned long),
-    			?-=?(volatile unsigned long*, unsigned long);
-long long			?-=?(         long long*, long long),
-    			?-=?(volatile long long*, long long);
-unsigned long long		?-=?(         unsigned long long*, unsigned long long),
-    			?-=?(volatile unsigned long long*, unsigned long long);
-
-char			?<<=?(         char*, char),
-    			?<<=?(volatile char*, char);
-signed char		?<<=?(         signed char*, signed char),
-    			?<<=?(volatile signed char*, signed char);
-unsigned char		?<<=?(         unsigned char*, unsigned char),
-    			?<<=?(volatile unsigned char*, unsigned char);
-short			?<<=?(         short*, short),
-    			?<<=?(volatile short*, short);
-unsigned short		?<<=?(         unsigned short*, unsigned short),
-    			?<<=?(volatile unsigned short*, unsigned short);
-int			?<<=?(         int*, int),
-    			?<<=?(volatile int*, int);
-unsigned		?<<=?(         unsigned*, unsigned),
-    			?<<=?(volatile unsigned*, unsigned);
-long			?<<=?(         long*, long),
-    			?<<=?(volatile long*, long);
-unsigned long		?<<=?(         unsigned long*, unsigned long),
-    			?<<=?(volatile unsigned long*, unsigned long);
-long long			?<<=?(         long long*, long long),
-    			?<<=?(volatile long long*, long long);
-unsigned long long		?<<=?(         unsigned long long*, unsigned long long),
-    			?<<=?(volatile unsigned long long*, unsigned long long);
-
-char			?>>=?(         char*, char),
-    			?>>=?(volatile char*, char);
-signed char		?>>=?(         signed char*, signed char),
-    			?>>=?(volatile signed char*, signed char);
-unsigned char		?>>=?(         unsigned char*, unsigned char),
-    			?>>=?(volatile unsigned char*, unsigned char);
-short			?>>=?(         short*, short),
-    			?>>=?(volatile short*, short);
-unsigned short		?>>=?(         unsigned short*, unsigned short),
-    			?>>=?(volatile unsigned short*, unsigned short);
-int			?>>=?(         int*, int),
-    			?>>=?(volatile int*, int);
-unsigned		?>>=?(         unsigned*, unsigned),
-    			?>>=?(volatile unsigned*, unsigned);
-long			?>>=?(         long*, long),
-    			?>>=?(volatile long*, long);
-unsigned long		?>>=?(         unsigned long*, unsigned long),
-    			?>>=?(volatile unsigned long*, unsigned long);
-long long			?>>=?(         long long*, long long),
-    			?>>=?(volatile long long*, long long);
-unsigned long long		?>>=?(         unsigned long long*, unsigned long long),
-    			?>>=?(volatile unsigned long long*, unsigned long long);
-
-char			?&=?(         char*, char),
-    			?&=?(volatile char*, char);
-signed char		?&=?(         signed char*, signed char),
-    			?&=?(volatile signed char*, signed char);
-unsigned char		?&=?(         unsigned char*, unsigned char),
-    			?&=?(volatile unsigned char*, unsigned char);
-short			?&=?(         short*, short),
-    			?&=?(volatile short*, short);
-unsigned short		?&=?(         unsigned short*, unsigned short),
-    			?&=?(volatile unsigned short*, unsigned short);
-int			?&=?(         int*, int),
-    			?&=?(volatile int*, int);
-unsigned		?&=?(         unsigned*, unsigned),
-    			?&=?(volatile unsigned*, unsigned);
-long			?&=?(         long*, long),
-    			?&=?(volatile long*, long);
-unsigned long		?&=?(         unsigned long*, unsigned long),
-    			?&=?(volatile unsigned long*, unsigned long);
-long long			?&=?(         long long*, long long),
-    			?&=?(volatile long long*, long long);
-unsigned long long		?&=?(         unsigned long long*, unsigned long long),
-    			?&=?(volatile unsigned long long*, unsigned long long);
-
-char			?|=?(         char*, char),
-    			?|=?(volatile char*, char);
-signed char		?|=?(         signed char*, signed char),
-    			?|=?(volatile signed char*, signed char);
-unsigned char		?|=?(         unsigned char*, unsigned char),
-    			?|=?(volatile unsigned char*, unsigned char);
-short			?|=?(         short*, short),
-    			?|=?(volatile short*, short);
-unsigned short		?|=?(         unsigned short*, unsigned short),
-    			?|=?(volatile unsigned short*, unsigned short);
-int			?|=?(         int*, int),
-    			?|=?(volatile int*, int);
-unsigned		?|=?(         unsigned*, unsigned),
-    			?|=?(volatile unsigned*, unsigned);
-long			?|=?(         long*, long),
-    			?|=?(volatile long*, long);
-unsigned long		?|=?(         unsigned long*, unsigned long),
-    			?|=?(volatile unsigned long*, unsigned long);
-long long			?|=?(         long long*, long long),
-    			?|=?(volatile long long*, long long);
-unsigned long long		?|=?(         unsigned long long*, unsigned long long),
-    			?|=?(volatile unsigned long long*, unsigned long long);
-
-char			?^=?(         char*, char),
-    			?^=?(volatile char*, char);
-signed char		?^=?(         signed char*, signed char),
-    			?^=?(volatile signed char*, signed char);
-unsigned char		?^=?(         unsigned char*, unsigned char),
-    			?^=?(volatile unsigned char*, unsigned char);
-short			?^=?(         short*, short),
-    			?^=?(volatile short*, short);
-unsigned short		?^=?(         unsigned short*, unsigned short),
-    			?^=?(volatile unsigned short*, unsigned short);
-int			?^=?(         int*, int),
-    			?^=?(volatile int*, int);
-unsigned		?^=?(         unsigned*, unsigned),
-    			?^=?(volatile unsigned*, unsigned);
-long			?^=?(         long*, long),
-    			?^=?(volatile long*, long);
-unsigned long		?^=?(         unsigned long*, unsigned long),
-    			?^=?(volatile unsigned long*, unsigned long);
-long long			?^=?(         long long*, long long),
-    			?^=?(volatile long long*, long long);
-unsigned long long		?^=?(         unsigned long long*, unsigned long long),
-    			?^=?(volatile unsigned long long*, unsigned long long);
-
-
-float			?=?(         float *, float),
-    			?=?(volatile float *, float),
-    			?*=?(         float *, float),
-    			?*=?(volatile float *, float),
-    			?/=?(         float *, float),
-    			?/=?(volatile float *, float),
-    			?+=?(         float *, float),
-    			?+=?(volatile float *, float),
-    			?-=?(         float *, float),
-    			?-=?(volatile float *, float);
-
-double			?=?(         double *, double),
-    			?=?(volatile double *, double),
-    			?*=?(         double *, double),
-    			?*=?(volatile double *, double),
-    			?/=?(         double *, double),
-    			?/=?(volatile double *, double),
-    			?+=?(         double *, double),
-    			?+=?(volatile double *, double),
-    			?-=?(         double *, double),
-    			?-=?(volatile double *, double);
-
-long double		?=?(         long double *, long double),
-    			?=?(volatile long double *, long double),
-    			?*=?(         long double *, long double),
-    			?*=?(volatile long double *, long double),
-    			?/=?(         long double *, long double),
-    			?/=?(volatile long double *, long double),
-    			?+=?(         long double *, long double),
-    			?+=?(volatile long double *, long double),
-    			?-=?(         long double *, long double),
-    			?-=?(volatile long double *, long double);
-
-/*
- * ------------------------------------------------------------
- *
- * 			End of file
- *
- * ------------------------------------------------------------
- */
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,			void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *,			void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *, const		void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *, const		void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *,	    volatile	void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *,	    volatile 	void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   *, const volatile 	void * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT * volatile *, const volatile 	void * );
+
+forall( dtype DT ) void *		 ?=?(		     void *	     *,			DT * );
+forall( dtype DT ) void *		 ?=?(		     void * volatile *,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void *	     *,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void * volatile *,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void *	     *, const		DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void * volatile *, const		DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     *,			DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile *,			DT * );
+forall( dtype DT ) volatile void *   	 ?=?(	    volatile void *	     *,	      volatile	DT * );
+forall( dtype DT ) volatile void *   	 ?=?(	    volatile void * volatile *,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *,			DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *,			DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *, const		DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *, const		DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     *, const volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile *, const volatile	DT * );
+
+void *			?=?(		    void *	    *,		      void * );
+void *			?=?(		    void * volatile *,		      void * );
+const void *		?=?( const	    void *	    *,		      void * );
+const void *		?=?( const	    void * volatile *,		      void * );
+const void *		?=?( const	    void *	    *, const	      void * );
+const void *		?=?( const	    void * volatile *, const	      void * );
+volatile void *		?=?(	   volatile void *	    *,		      void * );
+volatile void *		?=?(	   volatile void * volatile *,		      void * );
+volatile void *		?=?(	   volatile void *	    *,	     volatile void * );
+volatile void *		?=?(	   volatile void * volatile *,	     volatile void * );
+const volatile void *	?=?( const volatile void *	    *,		      void * );
+const volatile void *	?=?( const volatile void * volatile *,		      void * );
+const volatile void *	?=?( const volatile void *	    *, const	      void * );
+const volatile void *	?=?( const volatile void * volatile *, const	      void * );
+const volatile void *	?=?( const volatile void *	    *,	     volatile void * );
+const volatile void *	?=?( const volatile void * volatile *,	     volatile void * );
+const volatile void *	?=?( const volatile void *	    *, const volatile void * );
+const volatile void *	?=?( const volatile void * volatile *, const volatile void * );
+
+forall( dtype DT ) DT *			?=?(		    DT *	  *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) DT *			?=?(		    DT * volatile *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) const DT *		?=?( const	    DT *	  *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) const DT *		?=?( const	    DT * volatile *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) volatile DT *	?=?( volatile	    DT *	  *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) volatile DT *	?=?( volatile	    DT * volatile *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile DT *	  *, forall( dtype DT2 ) const DT2 * );
+forall( dtype DT ) const volatile DT *	?=?( const volatile DT * volatile *, forall( dtype DT2 ) const DT2 * );
+
+forall( ftype FT ) FT * 		?=?( FT *	   *, forall( ftype FT2 ) FT2 * );
+forall( ftype FT ) FT *			?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
+
+forall( type T ) T * 			?+=?(		     T *	  *, ptrdiff_t );
+forall( type T ) T *			?+=?(		     T * volatile *, ptrdiff_t );
+forall( type T ) T *			?-=?(		     T *	  *, ptrdiff_t );
+forall( type T ) T *			?-=?(		     T * volatile *, ptrdiff_t );
+forall( type T ) const T * 		?+=?( const	     T *	  *, ptrdiff_t );
+forall( type T ) const T *		?+=?( const	     T * volatile *, ptrdiff_t );
+forall( type T ) const T *		?-=?( const	     T *	  *, ptrdiff_t );
+forall( type T ) const T *		?-=?( const	     T * volatile *, ptrdiff_t );
+forall( type T ) volatile T *		?+=?(	    volatile T *	  *, ptrdiff_t );
+forall( type T ) volatile T *		?+=?(	    volatile T * volatile *, ptrdiff_t );
+forall( type T ) volatile T *		?-=?(	    volatile T *	  *, ptrdiff_t );
+forall( type T ) volatile T *		?-=?(	    volatile T * volatile *, ptrdiff_t );
+forall( type T ) const volatile T *	?+=?( const volatile T *	  *, ptrdiff_t );
+forall( type T ) const volatile T *	?+=?( const volatile T * volatile *, ptrdiff_t );
+forall( type T ) const volatile T *	?-=?( const volatile T *	  *, ptrdiff_t );
+forall( type T ) const volatile T *	?-=?( const volatile T * volatile *, ptrdiff_t );
+
+_Bool			?=?(	      _Bool *, _Bool ),
+    			?=?( volatile _Bool *, _Bool );
+char			?=?(	      char *, char ),
+    			?=?( volatile char *, char );
+signed char		?=?(	      signed char *, signed char ),
+    			?=?( volatile signed char *, signed char );
+unsigned char		?=?(	      unsigned char *, unsigned char ),
+    			?=?( volatile unsigned char *, unsigned char );
+short			?=?(	      short *, short ),
+    			?=?( volatile short *, short );
+unsigned short		?=?(	      unsigned short *, unsigned short ),
+    			?=?( volatile unsigned short *, unsigned short );
+int			?=?(	      int *, int ),
+    			?=?( volatile int *, int );
+unsigned		?=?(	      unsigned *, unsigned ),
+    			?=?( volatile unsigned *, unsigned );
+long			?=?(	      long *, long ),
+    			?=?( volatile long *, long );
+unsigned long		?=?(	      unsigned long *, unsigned long ),
+    			?=?( volatile unsigned long *, unsigned long );
+long long		?=?(	      long long *, long long ),
+    			?=?( volatile long long *, long long );
+unsigned long long	?=?(	      unsigned long long *, unsigned long long ),
+    			?=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?*=?(	       _Bool *, _Bool ),
+    			?*=?( volatile _Bool *, _Bool );
+char			?*=?(	       char *, char ),
+    			?*=?( volatile char *, char );
+signed char		?*=?(	       signed char *, signed char ),
+    			?*=?( volatile signed char *, signed char );
+unsigned char		?*=?(	       unsigned char *, unsigned char ),
+    			?*=?( volatile unsigned char *, unsigned char );
+short			?*=?(	       short *, short ),
+    			?*=?( volatile short *, short );
+unsigned short		?*=?(	       unsigned short *, unsigned short ),
+    			?*=?( volatile unsigned short *, unsigned short );
+int			?*=?(	       int *, int ),
+    			?*=?( volatile int *, int );
+unsigned		?*=?(	       unsigned *, unsigned ),
+    			?*=?( volatile unsigned *, unsigned );
+long			?*=?(	       long *, long ),
+    			?*=?( volatile long *, long );
+unsigned long		?*=?(	       unsigned long *, unsigned long ),
+    			?*=?( volatile unsigned long *, unsigned long );
+long long		?*=?(	       long long *, long long ),
+    			?*=?( volatile long long *, long long );
+unsigned long long	?*=?(	       unsigned long long *, unsigned long long ),
+    			?*=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?/=?(	       _Bool *, _Bool ),
+    			?/=?( volatile _Bool *, _Bool );
+char			?/=?(	       char *, char ),
+    			?/=?( volatile char *, char );
+signed char		?/=?(	       signed char *, signed char ),
+    			?/=?( volatile signed char *, signed char );
+unsigned char		?/=?(	       unsigned char *, unsigned char ),
+    			?/=?( volatile unsigned char *, unsigned char );
+short			?/=?(	       short *, short ),
+    			?/=?( volatile short *, short );
+unsigned short		?/=?(	       unsigned short *, unsigned short ),
+    			?/=?( volatile unsigned short *, unsigned short );
+int			?/=?(	       int *, int ),
+    			?/=?( volatile int *, int );
+unsigned		?/=?(	       unsigned *, unsigned ),
+    			?/=?( volatile unsigned *, unsigned );
+long			?/=?(	       long *, long ),
+    			?/=?( volatile long *, long );
+unsigned long		?/=?(	       unsigned long *, unsigned long ),
+    			?/=?( volatile unsigned long *, unsigned long );
+long long		?/=?(	       long long *, long long ),
+    			?/=?( volatile long long *, long long );
+unsigned long long	?/=?(	       unsigned long long *, unsigned long long ),
+    			?/=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?%=?(	       _Bool *, _Bool ),
+    			?%=?( volatile _Bool *, _Bool );
+char			?%=?(	       char *, char ),
+    			?%=?( volatile char *, char );
+signed char		?%=?(	       signed char *, signed char ),
+    			?%=?( volatile signed char *, signed char );
+unsigned char		?%=?(	       unsigned char *, unsigned char ),
+    			?%=?( volatile unsigned char *, unsigned char );
+short			?%=?(	       short *, short ),
+    			?%=?( volatile short *, short );
+unsigned short		?%=?(	       unsigned short *, unsigned short ),
+    			?%=?( volatile unsigned short *, unsigned short );
+int			?%=?(	       int *, int ),
+    			?%=?( volatile int *, int );
+unsigned		?%=?(	       unsigned *, unsigned ),
+    			?%=?( volatile unsigned *, unsigned );
+long			?%=?(	       long *, long ),
+    			?%=?( volatile long *, long );
+unsigned long		?%=?(	       unsigned long *, unsigned long ),
+    			?%=?( volatile unsigned long *, unsigned long );
+long long		?%=?(	       long long *, long long ),
+    			?%=?( volatile long long *, long long );
+unsigned long long	?%=?(	       unsigned long long *, unsigned long long ),
+    			?%=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?+=?(	       _Bool *, _Bool ),
+    			?+=?( volatile _Bool *, _Bool );
+char			?+=?(	       char *, char ),
+    			?+=?( volatile char *, char );
+signed char		?+=?(	       signed char *, signed char ),
+    			?+=?( volatile signed char *, signed char );
+unsigned char		?+=?(	       unsigned char *, unsigned char ),
+    			?+=?( volatile unsigned char *, unsigned char );
+short			?+=?(	       short *, short ),
+    			?+=?( volatile short *, short );
+unsigned short		?+=?(	       unsigned short *, unsigned short ),
+    			?+=?( volatile unsigned short *, unsigned short );
+int			?+=?(	       int *, int ),
+    			?+=?( volatile int *, int );
+unsigned		?+=?(	       unsigned *, unsigned ),
+    			?+=?( volatile unsigned *, unsigned );
+long			?+=?(	       long *, long ),
+    			?+=?( volatile long *, long );
+unsigned long		?+=?(	       unsigned long *, unsigned long ),
+    			?+=?( volatile unsigned long *, unsigned long );
+long long		?+=?(	       long long *, long long ),
+    			?+=?( volatile long long *, long long );
+unsigned long long	?+=?(	       unsigned long long *, unsigned long long ),
+    			?+=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?-=?(	       _Bool *, _Bool ),
+    			?-=?( volatile _Bool *, _Bool );
+char			?-=?(	       char *, char ),
+    			?-=?( volatile char *, char );
+signed char		?-=?(	       signed char *, signed char ),
+    			?-=?( volatile signed char *, signed char );
+unsigned char		?-=?(	       unsigned char *, unsigned char ),
+    			?-=?( volatile unsigned char *, unsigned char );
+short			?-=?(	       short *, short ),
+    			?-=?( volatile short *, short );
+unsigned short		?-=?(	       unsigned short *, unsigned short ),
+    			?-=?( volatile unsigned short *, unsigned short );
+int			?-=?(	       int *, int ),
+    			?-=?( volatile int *, int );
+unsigned		?-=?(	       unsigned *, unsigned ),
+    			?-=?( volatile unsigned *, unsigned );
+long			?-=?(	       long *, long ),
+    			?-=?( volatile long *, long );
+unsigned long		?-=?(	       unsigned long *, unsigned long ),
+    			?-=?( volatile unsigned long *, unsigned long );
+long long		?-=?(	       long long *, long long ),
+    			?-=?( volatile long long *, long long );
+unsigned long long	?-=?(	       unsigned long long *, unsigned long long ),
+    			?-=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?<<=?(	        _Bool *, _Bool ),
+    			?<<=?( volatile _Bool *, _Bool );
+char			?<<=?(	        char *, char ),
+    			?<<=?( volatile char *, char );
+signed char		?<<=?(	        signed char *, signed char ),
+    			?<<=?( volatile signed char *, signed char );
+unsigned char		?<<=?(	        unsigned char *, unsigned char ),
+    			?<<=?( volatile unsigned char *, unsigned char );
+short			?<<=?(	        short *, short ),
+    			?<<=?( volatile short *, short );
+unsigned short		?<<=?(	        unsigned short *, unsigned short ),
+    			?<<=?( volatile unsigned short *, unsigned short );
+int			?<<=?(	        int *, int ),
+    			?<<=?( volatile int *, int );
+unsigned		?<<=?(	        unsigned *, unsigned ),
+    			?<<=?( volatile unsigned *, unsigned );
+long			?<<=?(	        long *, long ),
+    			?<<=?( volatile long *, long );
+unsigned long		?<<=?(	        unsigned long *, unsigned long ),
+    			?<<=?( volatile unsigned long *, unsigned long );
+long long		?<<=?(	        long long *, long long ),
+    			?<<=?( volatile long long *, long long );
+unsigned long long	?<<=?(	        unsigned long long *, unsigned long long ),
+    			?<<=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?>>=?(	        _Bool *, _Bool ),
+    			?>>=?( volatile _Bool *, _Bool );
+char			?>>=?(	        char *, char ),
+    			?>>=?( volatile char *, char );
+signed char		?>>=?(	        signed char *, signed char ),
+    			?>>=?( volatile signed char *, signed char );
+unsigned char		?>>=?(	        unsigned char *, unsigned char ),
+    			?>>=?( volatile unsigned char *, unsigned char );
+short			?>>=?(	        short *, short ),
+    			?>>=?( volatile short *, short );
+unsigned short		?>>=?(	        unsigned short *, unsigned short ),
+    			?>>=?( volatile unsigned short *, unsigned short );
+int			?>>=?(	        int *, int ),
+    			?>>=?( volatile int *, int );
+unsigned		?>>=?(	        unsigned *, unsigned ),
+    			?>>=?( volatile unsigned *, unsigned );
+long			?>>=?(	        long *, long ),
+    			?>>=?( volatile long *, long );
+unsigned long		?>>=?(	        unsigned long *, unsigned long ),
+    			?>>=?( volatile unsigned long *, unsigned long );
+long long		?>>=?(	        long long *, long long ),
+    			?>>=?( volatile long long *, long long );
+unsigned long long	?>>=?(	        unsigned long long *, unsigned long long ),
+    			?>>=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?&=?(	       _Bool *, _Bool ),
+    			?&=?( volatile _Bool *, _Bool );
+char			?&=?(	       char *, char ),
+    			?&=?( volatile char *, char );
+signed char		?&=?(	       signed char *, signed char ),
+    			?&=?( volatile signed char *, signed char );
+unsigned char		?&=?(	       unsigned char *, unsigned char ),
+    			?&=?( volatile unsigned char *, unsigned char );
+short			?&=?(	       short *, short ),
+    			?&=?( volatile short *, short );
+unsigned short		?&=?(	       unsigned short *, unsigned short ),
+    			?&=?( volatile unsigned short *, unsigned short );
+int			?&=?(	       int *, int ),
+    			?&=?( volatile int *, int );
+unsigned		?&=?(	       unsigned *, unsigned ),
+    			?&=?( volatile unsigned *, unsigned );
+long			?&=?(	       long *, long ),
+    			?&=?( volatile long *, long );
+unsigned long		?&=?(	       unsigned long *, unsigned long ),
+    			?&=?( volatile unsigned long *, unsigned long );
+long long		?&=?(	       long long *, long long ),
+    			?&=?( volatile long long *, long long );
+unsigned long long	?&=?(	       unsigned long long *, unsigned long long ),
+    			?&=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?|=?(	       _Bool *, _Bool ),
+    			?|=?( volatile _Bool *, _Bool );
+char			?|=?(	       char *, char ),
+    			?|=?( volatile char *, char );
+signed char		?|=?(	       signed char *, signed char ),
+    			?|=?( volatile signed char *, signed char );
+unsigned char		?|=?(	       unsigned char *, unsigned char ),
+    			?|=?( volatile unsigned char *, unsigned char );
+short			?|=?(	       short *, short ),
+    			?|=?( volatile short *, short );
+unsigned short		?|=?(	       unsigned short *, unsigned short ),
+    			?|=?( volatile unsigned short *, unsigned short );
+int			?|=?(	       int *, int ),
+    			?|=?( volatile int *, int );
+unsigned		?|=?(	       unsigned *, unsigned ),
+    			?|=?( volatile unsigned *, unsigned );
+long			?|=?(	       long *, long ),
+    			?|=?( volatile long *, long );
+unsigned long		?|=?(	       unsigned long *, unsigned long ),
+    			?|=?( volatile unsigned long *, unsigned long );
+long long		?|=?(	       long long *, long long ),
+    			?|=?( volatile long long *, long long );
+unsigned long long	?|=?(	       unsigned long long *, unsigned long long ),
+    			?|=?( volatile unsigned long long *, unsigned long long );
+
+_Bool			?^=?(	       _Bool *, _Bool ),
+    			?^=?( volatile _Bool *, _Bool );
+char			?^=?(	       char *, char ),
+    			?^=?( volatile char *, char );
+signed char		?^=?(	       signed char *, signed char ),
+    			?^=?( volatile signed char *, signed char );
+unsigned char		?^=?(	       unsigned char *, unsigned char ),
+    			?^=?( volatile unsigned char *, unsigned char );
+short			?^=?(	       short *, short ),
+    			?^=?( volatile short *, short );
+unsigned short		?^=?(	       unsigned short *, unsigned short ),
+    			?^=?( volatile unsigned short *, unsigned short );
+int			?^=?(	       int *, int ),
+    			?^=?( volatile int *, int );
+unsigned		?^=?(	       unsigned *, unsigned ),
+    			?^=?( volatile unsigned *, unsigned );
+long			?^=?(	       long *, long ),
+    			?^=?( volatile long *, long );
+unsigned long		?^=?(	       unsigned long *, unsigned long ),
+    			?^=?( volatile unsigned long *, unsigned long );
+long long		?^=?(	       long long *, long long ),
+    			?^=?( volatile long long *, long long );
+unsigned long long	?^=?(	       unsigned long long *, unsigned long long ),
+    			?^=?( volatile unsigned long long *, unsigned long long );
+
+
+float			?=?(	       float *, float ),
+    			?=?(  volatile float *, float ),
+    			?*=?(	       float *, float ),
+    			?*=?( volatile float *, float ),
+    			?/=?(	       float *, float ),
+    			?/=?( volatile float *, float ),
+    			?+=?(	       float *, float ),
+    			?+=?( volatile float *, float ),
+    			?-=?(	       float *, float ),
+    			?-=?( volatile float *, float );
+
+double			?=?(	       double *, double ),
+    			?=?(  volatile double *, double ),
+    			?*=?(	       double *, double ),
+    			?*=?( volatile double *, double ),
+    			?/=?(	       double *, double ),
+    			?/=?( volatile double *, double ),
+    			?+=?(	       double *, double ),
+    			?+=?( volatile double *, double ),
+    			?-=?(	       double *, double ),
+    			?-=?( volatile double *, double );
+
+long double		?=?(	       long double *, long double ),
+    			?=?(  volatile long double *, long double ),
+    			?*=?(	       long double *, long double ),
+    			?*=?( volatile long double *, long double ),
+    			?/=?(	       long double *, long double ),
+    			?/=?( volatile long double *, long double ),
+    			?+=?(	       long double *, long double ),
+    			?+=?( volatile long double *, long double ),
+    			?-=?(	       long double *, long double ),
+    			?-=?( volatile long double *, long double );
Index: libcfa/ptrdiff_t.c
===================================================================
--- libcfa/ptrdiff_t.c	(revision 3848e0e8736f68e720b8e97d4e893bb0bb0aca6b)
+++ libcfa/ptrdiff_t.c	(revision 3848e0e8736f68e720b8e97d4e893bb0bb0aca6b)
@@ -0,0 +1,1 @@
+#include <stddef.h>
