Index: tests/collections/.expect/string-operator.txt
===================================================================
--- tests/collections/.expect/string-operator.txt	(revision d03a386f1d6cd83b3e5eabdfdeb1a1a6903d70e6)
+++ tests/collections/.expect/string-operator.txt	(revision a800a19a7844710a07f5162dadf9ee50140df9b9)
@@ -99,2 +99,15 @@
 (skip)
 0x2a 0x2d
+
+a
+aa
+aaaa
+
+ab
+abab
+ababababab
+
+42
+139
+
+a ab
Index: tests/collections/string-operator.cfa
===================================================================
--- tests/collections/string-operator.cfa	(revision d03a386f1d6cd83b3e5eabdfdeb1a1a6903d70e6)
+++ tests/collections/string-operator.cfa	(revision a800a19a7844710a07f5162dadf9ee50140df9b9)
@@ -322,3 +322,33 @@
             printf( "0x%x 0x%x\n", ch, ch + 3 );  // 0x3 0x6 
         }
+        sout | nl;
+
+        s = "";
+        s += 'a';               sout | s;   // a
+        s += "a";               sout | s;   // aa
+        s += s;                 sout | s;   // aaaa
+                                sout | nl;
+
+        s = "";
+        s += 'a' + 'b';         sout | s;   // ab
+        s += "a" + "b";         sout | s;   // abab
+        s += s + 'a' + 'b';     sout | s;   // ababababab
+                                sout | nl;
+
+        {
+            char ch = 42;       sout | (unsigned char) ch; // 42
+            ch += 'a';          sout | (unsigned char) ch; // 139
+                                sout | nl;
+        }
+
+        {
+            char retc = 'a';
+            string rets = "a";
+            char & weird() { return retc; }
+            string & weird() { return rets; }
+            (return char &) weird();
+            (return string &) weird();
+            weird() += 'b';                 // (ideally ambiguous)
+            sout | retc | ' ' | rets;       // a ab (known approximation flaw)
+        }
 }
