Index: doc/papers/general/Paper.tex
===================================================================
--- doc/papers/general/Paper.tex	(revision ed2bf543fa3be1fd1060ce94b61ceecea22cdcc6)
+++ doc/papers/general/Paper.tex	(revision 75e3cb2c3cd766da27ba7151c1a59ada1159d830)
@@ -1763,4 +1763,79 @@
 In addition to the expressive power, \lstinline|@=| provides a simple path for migrating legacy C code to \CFA, by providing a mechanism to incrementally convert initializers; the \CFA design team decided to introduce a new syntax for this escape hatch because we believe that our RAII implementation will handle the vast majority of code in a desirable way, and we wished to maintain familiar syntax for this common case.
 
+
+\subsection{Type Nesting}
+
+\CFA allows \newterm{type nesting}, and type qualification of the nested types (see Figure~\ref{f:TypeNestingQualification}), where as C hoists (refactors) nested types into the enclosing scope and has no type qualification.
+\begin{figure}
+\centering
+\lstDeleteShortInline@%
+\begin{tabular}{@{}l@{\hspace{3em}}l|l@{}}
+\multicolumn{1}{c@{\hspace{3em}}}{\textbf{C Type Nesting}}	& \multicolumn{1}{c}{\textbf{C Implicit Hoisting}}	& \multicolumn{1}{|c}{\textbf{\CFA}}	\\
+\hline
+\begin{cfa}
+struct S {
+	enum C { R, G, B };
+	struct T {
+		union U { int i, j; };
+		enum C c;
+		short int i, j;
+	};
+	struct T t;
+} s;
+
+int rtn() {
+	s.t.c = R;
+	struct T t = { R, 1, 2 };
+	enum C c;
+	union U u;
+}
+\end{cfa}
+&
+\begin{cfa}
+enum C { R, G, B };
+union U { int i, j; };
+struct T {
+	enum C c;
+	short int i, j;
+};
+struct S {
+	struct T t;
+} s;
+	
+
+
+
+
+
+
+\end{cfa}
+&
+\begin{cfa}
+struct S {
+	enum C { R, G, B };
+	struct T {
+		union U { int i, j; };
+		enum C c;
+		short int i, j;
+	};
+	struct T t;
+} s;
+
+int rtn() {
+	s.t.c = `S.`R;	// type qualification
+	struct `S.`T t = { `S.`R, 1, 2 };
+	enum `S.`C c;
+	union `S.T.`U u;
+}
+\end{cfa}
+\end{tabular}
+\lstMakeShortInline@%
+\caption{Type Nesting / Qualification}
+\label{f:TypeNestingQualification}
+\end{figure}
+In the left example in C, types @C@, @U@ and @T@ are implicitly hoisted outside of type @S@ into the containing block scope.
+In the right example in \CFA, the types are not hoisted and accessed using the field-selection operator ``@.@'' for type qualification, as does Java, rather than the \CC type-selection operator ``@::@''.
+
+
 \subsection{Default Parameters}
 
@@ -1815,6 +1890,6 @@
 \section{Libraries}
 
-As stated in Section~\ref{sec:poly-fns}, \CFA inherits a massive corpus of library code, where other programming languages must rewrite or provide fragile inter-language communication with C.
-\CFA has replacement libraries condensing hundreds of existing C routines into tens of \CFA overloaded routines, all without rewriting the actual computations.
+As stated in Section~\ref{sec:poly-fns}, \CFA inherits a large corpus of library code, where other programming languages must rewrite or provide fragile inter-language communication with C.
+\CFA has replacement libraries condensing hundreds of existing C names into tens of \CFA overloaded names, all without rewriting the actual computations.
 In many cases, the interface is an inline wrapper providing overloading during compilation but zero cost at runtime.
 The following sections give a glimpse of the interface reduction to many C libraries.
@@ -1908,5 +1983,5 @@
 \lstMakeShortInline@%
 \end{cquote}
-While \Celeven provides type-generic math~\cite[\S~7.25]{C11} in @tgmath.h@ to provide a similar mechanism, these macros are limited, matching a routine name with a single set of floating type(s).
+While \Celeven has type-generic math~\cite[\S~7.25]{C11} in @tgmath.h@ to provide a similar mechanism, these macros are limited, matching a routine name with a single set of floating type(s).
 For example, it is not possible to overload @atan@ for both one and two arguments;
 instead the names @atan@ and @atan2@ are required.
@@ -1955,4 +2030,5 @@
 \lstMakeShortInline@%
 \end{cquote}
+In additon, there are polymorphic routines, like @min@ and @max@, which work on any type with operators @?<?@ or @?>?@.
 
 The following shows one example where \CFA \emph{extends} an existing standard C interface to reduce complexity and provide safety.
@@ -1972,9 +2048,11 @@
 \end{description}
 Table~\ref{t:StorageManagementOperations} shows the capabilities provided by C/\Celeven allocation-routines and how all the capabilities can be combined into two \CFA routines.
+
+\CFA storage-management routines extend the C equivalents by overloading, providing shallow type-safety, and removing the need to specify the base allocation-size.
 The following example contrasts \CFA and C storage-allocation operation performing the same operations with the same type safety:
 \begin{cquote}
 \begin{cfa}[aboveskip=0pt]
-size_t  dim = 10;
-char fill = '\xff';
+size_t  dim = 10;							$\C{// array dimension}$
+char fill = '\xff';							$\C{// initialization fill value}$
 int * ip;
 \end{cfa}
@@ -2013,6 +2091,14 @@
 \end{cquote}
 Variadic @new@ (see Section~\ref{sec:variadic-tuples}) cannot support the same overloading because extra parameters are for initialization.
-
-Finally, the \CFA memory-allocator has \newterm{sticky properties} for dynamically-allocated storage: fill and alignment are remembered with an object's storage.
+Hence, there are @new@ and @anew@ routines for single and array variables, and the fill value is the arguments to the constructor, \eg:
+\begin{cfa}
+struct S { int i, j; };
+void ?{}( S & s, int i, int j ) { s.i = i; s.j = j; }
+S * s = new( 2, 3 );						$\C{// allocate storage and run constructor}$
+S * as = anew( dim, 2, 3 );					$\C{// each array element initialized to 2, 3}$
+\end{cfa}
+Note, \CC can only initialization array elements via the default constructor.
+
+Finally, the \CFA memory-allocator has \newterm{sticky properties} for dynamic storage: fill and alignment are remembered with an object's storage in the heap.
 When a @realloc@ is performed, the sticky properties are respected, so that new storage is correctly aligned and initialized with the fill character.
 
@@ -2130,5 +2216,4 @@
 There are routines to set and get the separator string, and manipulators to toggle separation on and off in the middle of output.
 \end{itemize}
-The storage-management routines extend their C equivalents by overloading, alternate names, providing shallow type-safety, and removing the need to specify the allocation size for non-array types.
 
 
@@ -2139,5 +2224,5 @@
 The \CFA interface wraps GMP routines into operator routines to make programming with multi-precision integers identical to using fixed-sized integers.
 The \CFA type name for multi-precision signed-integers is @Int@ and the header file is @gmp@.
-The following factorial programs contrast using GMP with the \CFA and C interfaces.
+The following multi-precision factorial programs contrast using GMP with the \CFA and C interfaces.
 \begin{cquote}
 \lstDeleteShortInline@%
