Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ libcfa/src/collections/string.cfa	(revision e8b3717356ccae5e6e9b884e3b31caa47d950414)
@@ -30,7 +30,7 @@
 
 // private (not in header)
-static void ?{}( string & s, string_res & src, size_t start, size_t end ) {
-    (s.inner) { malloc() };
-    ?{}( *s.inner, src, SHARE_EDITS, start, end );
+static void ?{}( string & s, string_res & src, size_t start, size_t len ) {
+    (s.inner) { malloc() };
+    ?{}( *s.inner, src, SHARE_EDITS, start, len );
 }
 
@@ -161,11 +161,11 @@
 // Slicing
 
-string ?()( string & s, size_t start, size_t end ) {
-    string ret = { *s.inner, start, end };
+string ?()( string & s, size_t start, size_t len ) {
+    string ret = { *s.inner, start, len };
     return ret`shareEdits;
 }
 
 string ?()( string & s, size_t start ) {
-    string ret = { *s.inner, start, size( s ) };
+    string ret = { *s.inner, start, size( s ) - start };
     return ret`shareEdits;
 }
@@ -286,5 +286,5 @@
 
 string ?[?](string & s, size_t index) {
-    string ret = { *s.inner, index, index + 1 };
+    string ret = { *s.inner, index, 1 };
     return ret`shareEdits;
 }
Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ libcfa/src/collections/string.hfa	(revision e8b3717356ccae5e6e9b884e3b31caa47d950414)
@@ -162,5 +162,5 @@
 
 // Slicing
-string ?()( string & s, size_t start, size_t end );  // TODO const?
+string ?()( string & s, size_t start, size_t len );  // TODO const?
 string ?()( string & s, size_t start);
 
Index: libcfa/src/collections/string_res.cfa
===================================================================
--- libcfa/src/collections/string_res.cfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ libcfa/src/collections/string_res.cfa	(revision e8b3717356ccae5e6e9b884e3b31caa47d950414)
@@ -346,7 +346,9 @@
 }
 
+
 // General copy constructor
-void ?{}(string_res & s, const string_res & s2, StrResInitMode mode, size_t start, size_t end ) {
-
+void ?{}(string_res & s, const string_res & s2, StrResInitMode mode, size_t start, size_t len ) {
+
+    size_t end = start + len;
     verify( start <= end && end <= s2.Handle.lnth );
 
@@ -611,5 +613,8 @@
 
 void assignAt(const string_res & s, size_t index, char val) {
-    string_res editZone = { s, SHARE_EDITS, index, index+1 };
+    // caution: not tested (not reachable by string-api-coverage interface)
+    // equivalent form at string level is `s[index] = val`,
+    // which uses the overload that returns a length-1 string
+    string_res editZone = { s, SHARE_EDITS, index, 1 };
     assign(editZone, &val, 1);
 }
@@ -656,5 +661,5 @@
 
 void ?*=?(string_res & s, size_t factor) {
-    string_res s2 = { s, COPY_VALUE, 0, size(s) };
+    string_res s2 = { s, COPY_VALUE };
     s = "";
     for (factor) s += s2;
Index: libcfa/src/collections/string_res.hfa
===================================================================
--- libcfa/src/collections/string_res.hfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ libcfa/src/collections/string_res.hfa	(revision e8b3717356ccae5e6e9b884e3b31caa47d950414)
@@ -87,5 +87,5 @@
 
 enum StrResInitMode { COPY_VALUE, SHARE_EDITS };
-void ?{}(string_res & s, const string_res & src, StrResInitMode, size_t start, size_t end );
+void ?{}(string_res & s, const string_res & src, StrResInitMode, size_t start, size_t len );
 static inline void ?{}(string_res & s, const string_res & src, StrResInitMode mode ) {
     ?{}( s, src, mode, 0, size(src));
Index: tests/collections/.expect/string-api-coverage.txt
===================================================================
--- tests/collections/.expect/string-api-coverage.txt	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ tests/collections/.expect/string-api-coverage.txt	(revision e8b3717356ccae5e6e9b884e3b31caa47d950414)
@@ -51,4 +51,6 @@
 QQQ
 asdfasdfasdf
+lo
+hello heliocentric
 e
 help!!!o
Index: tests/collections/string-api-coverage.cfa
===================================================================
--- tests/collections/string-api-coverage.cfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ tests/collections/string-api-coverage.cfa	(revision e8b3717356ccae5e6e9b884e3b31caa47d950414)
@@ -51,12 +51,12 @@
     sout | (s == "hello") | (s == "world");
     sout | (s != "world") | (s != "hello");
-    sout | ( frag == s(1,4) ) | ( s3   == s(1,4) );
-    sout | ( s3   != s(1,4) ) | ( frag != s(1,4) );
-    sout | ( s2(1,4) == s(1,4) ) | ( s3(1,4)   == s(1,4) );
-    sout | ( s3(1,4) != s(1,4) ) | ( s2(1,4)   != s(1,4) );
-    sout | ( s(1,4) == frag ) | ( s(1,4) == s3   );
-    sout | ( s(1,4) != s3   ) | ( s(1,4) != frag );
-    sout | ( s(1,4) == "ell"   ) | ( s(1,4) == "world" );
-    sout | ( s(1,4) != "world" ) | ( s(1,4) != "ell"   );
+    sout | ( frag == s(1,3) ) | ( s3   == s(1,3) );
+    sout | ( s3   != s(1,3) ) | ( frag != s(1,3) );
+    sout | ( s2(1,3) == s(1,3) ) | ( s3(1,3)   == s(1,3) );
+    sout | ( s3(1,3) != s(1,3) ) | ( s2(1,3)   != s(1,3) );
+    sout | ( s(1,3) == frag ) | ( s(1,3) == s3   );
+    sout | ( s(1,3) != s3   ) | ( s(1,3) != frag );
+    sout | ( s(1,3) == "ell"   ) | ( s(1,3) == "world" );
+    sout | ( s(1,3) != "world" ) | ( s(1,3) != "ell"   );
 
 
@@ -226,5 +226,12 @@
     //
 
-    //...
+    // Range cases treated thoroughly in "string-overwrite" test.
+    // Composability with comparison and search are demoed above and below.
+    // Coverage here adds the single-argument ("rest of string") overload.
+
+    sx = s;
+    sout | sx(3); // lo
+    sx(3) = "iocentric";
+    sout | s | sx; // hello heliocentric
 
     //
@@ -328,8 +335,8 @@
         | find( alphabet        , "def")  // 3
         | find( alphabet( 0, 26), "def")  // 3
-        | find( alphabet( 2, 26), "def")  // 1
-        | find( alphabet( 3, 26), "def")  // 0
-        | find( alphabet( 4, 26), "def")  // 22, not found
-        | find( alphabet( 4, 26),  "ef")  // 0
+        | find( alphabet( 2, 24), "def")  // 1
+        | find( alphabet( 3, 23), "def")  // 0
+        | find( alphabet( 4, 22), "def")  // 22, not found
+        | find( alphabet( 4, 22),  "ef")  // 0
         | find( alphabet( 0,  6), "def")  // 3
         | find( alphabet( 0,  5), "def")  // 5, not found
@@ -339,8 +346,8 @@
         | includes( alphabet        , "def")  // true
         | includes( alphabet( 0, 26), "def")  // true
-        | includes( alphabet( 2, 26), "def")  // true
-        | includes( alphabet( 3, 26), "def")  // true
-        | includes( alphabet( 4, 26), "def")  // false
-        | includes( alphabet( 4, 26),  "ef")  // true
+        | includes( alphabet( 2, 24), "def")  // true
+        | includes( alphabet( 3, 23), "def")  // true
+        | includes( alphabet( 4, 22), "def")  // false
+        | includes( alphabet( 4, 22),  "ef")  // true
         | includes( alphabet( 0,  6), "def")  // true
         | includes( alphabet( 0,  5), "def")  // false
@@ -350,6 +357,6 @@
         | startsWith( alphabet        , "abc")  // true
         | startsWith( alphabet( 0, 26), "abc")  // true
-        | startsWith( alphabet( 1, 26), "abc")  // false
-        | startsWith( alphabet( 1, 26),  "bc")  // true
+        | startsWith( alphabet( 1, 25), "abc")  // false
+        | startsWith( alphabet( 1, 25),  "bc")  // true
         | startsWith( alphabet( 0, 26), "abc")  // true
         | startsWith( alphabet( 0,  4), "abc")  // true
@@ -365,7 +372,7 @@
         | endsWith( alphabet( 0, 25), "xy" )  // true
         | endsWith( alphabet( 0, 26), "xyz")  // true
-        | endsWith( alphabet(23, 26), "xyz")  // true
-        | endsWith( alphabet(24, 26), "xyz")  // false
-        | endsWith( alphabet(24, 26),  "yz")  // true
+        | endsWith( alphabet(23,  3), "xyz")  // true
+        | endsWith( alphabet(24,  2), "xyz")  // false
+        | endsWith( alphabet(24,  2),  "yz")  // true
         | endsWith( alphabet        , "abc"); // false
 
Index: tests/collections/string-overwrite.cfa
===================================================================
--- tests/collections/string-overwrite.cfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ tests/collections/string-overwrite.cfa	(revision e8b3717356ccae5e6e9b884e3b31caa47d950414)
@@ -9,6 +9,8 @@
 MS = modifier start
 ME = modifier end
+ML = modifier length
 WS = witness start
 WE = witness end
+WL = witness length
 
 The test does:
@@ -71,11 +73,14 @@
 
 
-void showOneReplacement(string & s, int ms, int me, int ws, int we, const char* replaceWith) {
+void showOneReplacement(string & s, int ms, int ml, int ws, int wl, const char* replaceWith) {
+
+    int me = ms + ml;
+    int we = ws + wl;
 
     assert( ms >= 0 && ms <= me && me <= size(s) );
     assert( ws >= 0 && ws <= we && we <= size(s) );
 
-    string mod = s(ms, me)`shareEdits;
-    string wit = s(ws, we)`shareEdits;
+    string mod = s(ms, ml)`shareEdits;
+    string wit = s(ws, wl)`shareEdits;
 
     string modOld = mod;
@@ -118,115 +123,115 @@
 void runReplaceCases() {
     char * alphabetTemplate = "abcdefghijklmnopqrstuvwxyz";
-    struct { int ms; int me; int ws; int we; char *replaceWith; char *label; } cases[] = {
-        { 12, 14, 10, 20, "xxxxx", "warmup" },
-        { 10, 10, 10, 10, "=====", "1"      },
-        { 10, 10, 10, 10, "=="   , ""       },
-        { 10, 10, 10, 10, "="    , ""       },
-        { 10, 10, 10, 10, ""     , ""       },
-        { 10, 12, 12, 12, "=====", "2"      },
-        { 10, 12, 12, 12, "=="   , ""       },
-        { 10, 12, 12, 12, "="    , ""       },
-        { 10, 12, 12, 12, ""     , ""       },
-        { 12, 12, 10, 12, "=====", "3"      },
-        { 12, 12, 10, 12, "=="   , ""       },
-        { 12, 12, 10, 12, "="    , ""       },
-        { 12, 12, 10, 12, ""     , ""       },
-        { 10, 10, 12, 12, "=====", "4"      },
-        { 10, 10, 12, 12, "=="   , ""       },
-        { 10, 10, 12, 12, "="    , ""       },
-        { 10, 10, 12, 12, ""     , ""       },
-        { 12, 12, 10, 10, "=====", "5"      },
-        { 12, 12, 10, 10, "=="   , ""       },
-        { 12, 12, 10, 10, "="    , ""       },
-        { 12, 12, 10, 10, ""     , ""       },
-        { 10, 12, 10, 12, "=====", "6"      },
-        { 10, 12, 10, 12, "=="   , ""       },
-        { 10, 12, 10, 12, "="    , ""       },
-        { 10, 12, 10, 12, ""     , ""       },
-        { 10, 12, 10, 10, "=====", "7"      },
-        { 10, 12, 10, 10, "=="   , ""       },
-        { 10, 12, 10, 10, "="    , ""       },
-        { 10, 12, 10, 10, ""     , ""       },
-        { 10, 10, 10, 12, "=====", "8"      },
-        { 10, 10, 10, 12, "=="   , ""       },
-        { 10, 10, 10, 12, "="    , ""       },
-        { 10, 10, 10, 12, ""     , ""       },
-        { 10, 12, 14, 14, "=====", "9"      },
-        { 10, 12, 14, 14, "=="   , ""       },
-        { 10, 12, 14, 14, "="    , ""       },
-        { 10, 12, 14, 14, ""     , ""       },
-        { 10, 14, 12, 14, "=====", "10"     },
-        { 10, 14, 12, 14, "=="   , ""       },
-        { 10, 14, 12, 14, "="    , ""       },  // FORMERLY unrunnable bug: tries to print seemingly infinite string
-        { 10, 14, 12, 14, ""     , ""       },  // ditto
-        { 14, 14, 10, 12, "=====", "11"     },
-        { 14, 14, 10, 12, "=="   , ""       },
-        { 14, 14, 10, 12, "="    , ""       },
-        { 14, 14, 10, 12, ""     , ""       },
-        { 12, 14, 10, 14, "=====", "12"     }, // correctness observation:  watching klmn while mn |-> xxx gives klxxx because the mn is inside what I'm watching
-        { 12, 14, 10, 14, "=="   , ""       },
-        { 12, 14, 10, 14, "="    , ""       },
-        { 12, 14, 10, 14, ""     , ""       },
-        { 10, 12, 12, 14, "=====", "13"     },
-        { 10, 12, 12, 14, "=="   , ""       },
-        { 10, 12, 12, 14, "="    , ""       },
-        { 10, 12, 12, 14, ""     , ""       },
-        { 10, 14, 12, 12, "=====", "14"     },
-        { 10, 14, 12, 12, "=="   , ""       },
-        { 10, 14, 12, 12, "="    , ""       },
-        { 10, 14, 12, 12, ""     , ""       },
-        { 12, 14, 10, 12, "=====", "15"     },
-        { 12, 14, 10, 12, "=="   , ""       },
-        { 12, 14, 10, 12, "="    , ""       },
-        { 12, 14, 10, 12, ""     , ""       },
-        { 12, 12, 10, 14, "=====", "16"     },
-        { 12, 12, 10, 14, "=="   , ""       },
-        { 12, 12, 10, 14, "="    , ""       },
-        { 12, 12, 10, 14, ""     , ""       },
-        { 10, 14, 10, 12, "=====", "17"     },
-        { 10, 14, 10, 12, "=="   , ""       },
-        { 10, 14, 10, 12, "="    , ""       },
-        { 10, 14, 10, 12, ""     , ""       },
-        { 10, 10, 12, 14, "=====", "18"     },
-        { 10, 10, 12, 14, "=="   , ""       },
-        { 10, 10, 12, 14, "="    , ""       },
-        { 10, 10, 12, 14, ""     , ""       },
-        { 10, 12, 10, 14, "=====", "19"     },
-        { 10, 12, 10, 14, "=="   , ""       },
-        { 10, 12, 10, 14, "="    , ""       },
-        { 10, 12, 10, 14, ""     , ""       },
-        { 12, 14, 10, 10, "=====", "20"     },
-        { 12, 14, 10, 10, "=="   , ""       },
-        { 12, 14, 10, 10, "="    , ""       },
-        { 12, 14, 10, 10, ""     , ""       },
-        { 10, 12, 14, 16, "=====", "21"     },
-        { 10, 12, 14, 16, "=="   , ""       },
-        { 10, 12, 14, 16, "="    , ""       },
-        { 10, 12, 14, 16, ""     , ""       },
-        { 10, 14, 12, 16, "=====", "22"     },
-        { 10, 14, 12, 16, "=="   , ""       },
-        { 10, 14, 12, 16, "="    , ""       },
-        { 10, 14, 12, 16, ""     , ""       },
-        { 10, 16, 12, 14, "=====", "23"     },
-        { 10, 16, 12, 14, "=="   , ""       },
-        { 10, 16, 12, 14, "="    , ""       },
-        { 10, 16, 12, 14, ""     , ""       },
-        { 14, 16, 10, 12, "=====", "24"     },
-        { 14, 16, 10, 12, "=="   , ""       },
-        { 14, 16, 10, 12, "="    , ""       },
-        { 14, 16, 10, 12, ""     , ""       },
-        { 12, 16, 10, 14, "=====", "25"     },
-        { 12, 16, 10, 14, "=="   , ""       },
-        { 12, 16, 10, 14, "="    , ""       },
-        { 12, 16, 10, 14, ""     , ""       },
-        { 12, 14, 10, 16, "=====", "26"     },
-        { 12, 14, 10, 16, "=="   , ""       },
-        { 12, 14, 10, 16, "="    , ""       },
-        { 12, 14, 10, 16, ""     , ""       },
+    struct { int ms; int ml; int ws; int wl; char *replaceWith; char *label; } cases[] = {
+        { 12,  2, 10, 10, "xxxxx", "warmup" },
+        { 10,  0, 10,  0, "=====", "1"      },
+        { 10,  0, 10,  0, "=="   , ""       },
+        { 10,  0, 10,  0, "="    , ""       },
+        { 10,  0, 10,  0, ""     , ""       },
+        { 10,  2, 12,  0, "=====", "2"      },
+        { 10,  2, 12,  0, "=="   , ""       },
+        { 10,  2, 12,  0, "="    , ""       },
+        { 10,  2, 12,  0, ""     , ""       },
+        { 12,  0, 10,  2, "=====", "3"      },
+        { 12,  0, 10,  2, "=="   , ""       },
+        { 12,  0, 10,  2, "="    , ""       },
+        { 12,  0, 10,  2, ""     , ""       },
+        { 10,  0, 12,  0, "=====", "4"      },
+        { 10,  0, 12,  0, "=="   , ""       },
+        { 10,  0, 12,  0, "="    , ""       },
+        { 10,  0, 12,  0, ""     , ""       },
+        { 12,  0, 10,  0, "=====", "5"      },
+        { 12,  0, 10,  0, "=="   , ""       },
+        { 12,  0, 10,  0, "="    , ""       },
+        { 12,  0, 10,  0, ""     , ""       },
+        { 10,  2, 10,  2, "=====", "6"      },
+        { 10,  2, 10,  2, "=="   , ""       },
+        { 10,  2, 10,  2, "="    , ""       },
+        { 10,  2, 10,  2, ""     , ""       },
+        { 10,  2, 10,  0, "=====", "7"      },
+        { 10,  2, 10,  0, "=="   , ""       },
+        { 10,  2, 10,  0, "="    , ""       },
+        { 10,  2, 10,  0, ""     , ""       },
+        { 10,  0, 10,  2, "=====", "8"      },
+        { 10,  0, 10,  2, "=="   , ""       },
+        { 10,  0, 10,  2, "="    , ""       },
+        { 10,  0, 10,  2, ""     , ""       },
+        { 10,  2, 14,  0, "=====", "9"      },
+        { 10,  2, 14,  0, "=="   , ""       },
+        { 10,  2, 14,  0, "="    , ""       },
+        { 10,  2, 14,  0, ""     , ""       },
+        { 10,  4, 12,  2, "=====", "10"     },
+        { 10,  4, 12,  2, "=="   , ""       },
+        { 10,  4, 12,  2, "="    , ""       },  // FORMERLY unrunnable bug: tries to print seemingly infinite string
+        { 10,  4, 12,  2, ""     , ""       },  // ditto
+        { 14,  0, 10,  2, "=====", "11"     },
+        { 14,  0, 10,  2, "=="   , ""       },
+        { 14,  0, 10,  2, "="    , ""       },
+        { 14,  0, 10,  2, ""     , ""       },
+        { 12,  2, 10,  4, "=====", "12"     }, // correctness observation:  watching klmn while mn |-> xxx gives klxxx because the mn is inside what I'm watching
+        { 12,  2, 10,  4, "=="   , ""       },
+        { 12,  2, 10,  4, "="    , ""       },
+        { 12,  2, 10,  4, ""     , ""       },
+        { 10,  2, 12,  2, "=====", "13"     },
+        { 10,  2, 12,  2, "=="   , ""       },
+        { 10,  2, 12,  2, "="    , ""       },
+        { 10,  2, 12,  2, ""     , ""       },
+        { 10,  4, 12,  0, "=====", "14"     },
+        { 10,  4, 12,  0, "=="   , ""       },
+        { 10,  4, 12,  0, "="    , ""       },
+        { 10,  4, 12,  0, ""     , ""       },
+        { 12,  2, 10,  2, "=====", "15"     },
+        { 12,  2, 10,  2, "=="   , ""       },
+        { 12,  2, 10,  2, "="    , ""       },
+        { 12,  2, 10,  2, ""     , ""       },
+        { 12,  0, 10,  4, "=====", "16"     },
+        { 12,  0, 10,  4, "=="   , ""       },
+        { 12,  0, 10,  4, "="    , ""       },
+        { 12,  0, 10,  4, ""     , ""       },
+        { 10,  4, 10,  2, "=====", "17"     },
+        { 10,  4, 10,  2, "=="   , ""       },
+        { 10,  4, 10,  2, "="    , ""       },
+        { 10,  4, 10,  2, ""     , ""       },
+        { 10,  0, 12,  2, "=====", "18"     },
+        { 10,  0, 12,  2, "=="   , ""       },
+        { 10,  0, 12,  2, "="    , ""       },
+        { 10,  0, 12,  2, ""     , ""       },
+        { 10,  2, 10,  4, "=====", "19"     },
+        { 10,  2, 10,  4, "=="   , ""       },
+        { 10,  2, 10,  4, "="    , ""       },
+        { 10,  2, 10,  4, ""     , ""       },
+        { 12,  2, 10,  0, "=====", "20"     },
+        { 12,  2, 10,  0, "=="   , ""       },
+        { 12,  2, 10,  0, "="    , ""       },
+        { 12,  2, 10,  0, ""     , ""       },
+        { 10,  2, 14,  2, "=====", "21"     },
+        { 10,  2, 14,  2, "=="   , ""       },
+        { 10,  2, 14,  2, "="    , ""       },
+        { 10,  2, 14,  2, ""     , ""       },
+        { 10,  4, 12,  4, "=====", "22"     },
+        { 10,  4, 12,  4, "=="   , ""       },
+        { 10,  4, 12,  4, "="    , ""       },
+        { 10,  4, 12,  4, ""     , ""       },
+        { 10,  6, 12,  2, "=====", "23"     },
+        { 10,  6, 12,  2, "=="   , ""       },
+        { 10,  6, 12,  2, "="    , ""       },
+        { 10,  6, 12,  2, ""     , ""       },
+        { 14,  2, 10,  2, "=====", "24"     },
+        { 14,  2, 10,  2, "=="   , ""       },
+        { 14,  2, 10,  2, "="    , ""       },
+        { 14,  2, 10,  2, ""     , ""       },
+        { 12,  4, 10,  4, "=====", "25"     },
+        { 12,  4, 10,  4, "=="   , ""       },
+        { 12,  4, 10,  4, "="    , ""       },
+        { 12,  4, 10,  4, ""     , ""       },
+        { 12,  2, 10,  6, "=====", "26"     },
+        { 12,  2, 10,  6, "=="   , ""       },
+        { 12,  2, 10,  6, "="    , ""       },
+        { 12,  2, 10,  6, ""     , ""       },
     };
     for ( i; sizeof(cases)/sizeof(cases[0]) ) {
         sout | "------------------------------------------------------------------------" | cases[i].label;
         string replaceIn = alphabetTemplate;
-        showOneReplacement( replaceIn, cases[i].ms, cases[i].me, cases[i].ws, cases[i].we, cases[i].replaceWith );
+        showOneReplacement( replaceIn, cases[i].ms, cases[i].ml, cases[i].ws, cases[i].wl, cases[i].replaceWith );
     }
 }
@@ -244,10 +249,10 @@
     string s = "abcdefghijklmnopqrstuvwxyz";
 
-    s(5,10) = "qqqqq";  // start=5, end=10, len=5
-
-    sout | s;
-
-
-    s(5,5) = "-----";  // start=5, end=5, len=0
+    s(5,5) = "qqqqq";  // start=5, end=10, len=5
+
+    sout | s;
+
+
+    s(5,0) = "-----";  // start=5, end=5, len=0
 
     sout | s;
