Index: src/tests/.expect/sum.txt
===================================================================
--- src/tests/.expect/sum.txt	(revision 728df66bde6df9b1ca4ad068be30ea89605f46a3)
+++ src/tests/.expect/sum.txt	(revision 2b9ddf26317dcf5f2c92b44c8a865bb13d1a8de5)
@@ -4,2 +4,3 @@
 sum from 0.5 to 1.5 is 9.5, check 9.5
 sum from 5 to 15 is 95 95, check 95 95
+sum from 5 to 15 is 95, check 95
Index: src/tests/sum.c
===================================================================
--- src/tests/sum.c	(revision 728df66bde6df9b1ca4ad068be30ea89605f46a3)
+++ src/tests/sum.c	(revision 2b9ddf26317dcf5f2c92b44c8a865bb13d1a8de5)
@@ -11,9 +11,10 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Dec  7 09:13:36 2017
-// Update Count     : 261
+// Last Modified On : Fri Jan 26 11:31:02 2018
+// Update Count     : 271
 //
 
 #include <fstream>
+#include <stdlib>
 
 void ?{}( int & c, zero_t ) { c = 0; }
@@ -28,8 +29,8 @@
 
 forall( otype T | sumable( T ) )						// use trait
-T sum( unsigned int n, T a[] ) {
-	T total = 0;										// instantiate T, select 0
-	for ( unsigned int i = 0; i < n; i += 1 )
-		total += a[i];									// select +
+T sum( unsigned int size, T a[] ) {
+	T total = 0;										// instantiate T from 0 by calling constructor
+	for ( unsigned int i = 0; i < size; i += 1 )
+		total += a[i];									// select appropriate +
 	return total;
 } // sum
@@ -55,5 +56,5 @@
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		| sum( size, (unsigned char *)a ) | ", check" | (int)s | endl;
+		 | sum( size, (unsigned char *)a ) | ", check" | (int)s | endl;
 
 	int s = 0, a[size], v = low;
@@ -63,5 +64,5 @@
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		| sum( size, (int *)a ) | ", check" | (int)s | endl;
+		 | sum( size, (int *)a ) | ", check" | (int)s | endl;
 
 	float s = 0.0f, a[size], v = low / 10.0f;
@@ -71,5 +72,5 @@
 	} // for
 	sout | "sum from" | low / 10.0f | "to" | High / 10.0f | "is"
-		| sum( size, (float *)a ) | ", check" | (float)s | endl;
+		 | sum( size, (float *)a ) | ", check" | (float)s | endl;
 
 	double s = 0.0, a[size], v = low / 10.0;
@@ -79,5 +80,5 @@
 	} // for
 	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
-		| sum( size, (double *)a ) | ", check" | (double)s | endl;
+		 | sum( size, (double *)a ) | ", check" | (double)s | endl;
 
 	struct S { int i, j; };
@@ -98,5 +99,19 @@
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		| sum( size, (S *)a ) | ", check" | (S)s | endl;
+		 | sum( size, (S *)a ) | ", check" | (S)s | endl;
+
+	forall( otype Impl | sumable( Impl ) )
+	struct GS {
+		Impl * x, * y;
+	};
+	GS(int) gs;
+	gs.x = anew( size );								// create array storage for field
+	s = 0; v = low;
+	for ( int i = 0; i < size; i += 1, v += 1 ) {
+		s += (int)v;
+		gs.x[i] = (int)v;								// set filed array in generic type
+	} // for
+	sout | "sum from" | low | "to" | High | "is"
+		 | sum( size, gs.x ) | ", check" | (int)s | endl; // add filed array in generic type
 } // main
 
