Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision dd10bf4147d92415385453a062d48db3c826aa3f)
+++ libcfa/src/collections/string.cfa	(revision a4ed165b3fb9a999f66e8ec4607eebc231a3ebfe)
@@ -70,4 +70,34 @@
 }
 
+void ?{}( string & s, ssize_t rhs ) {
+    (s.inner) { malloc() };
+    ?{}( *s.inner, rhs );
+}
+
+void ?{}( string & s, size_t rhs ) {
+    (s.inner) { malloc() };
+    ?{}( *s.inner, rhs );
+}
+
+void ?{}( string & s, double rhs ) {
+    (s.inner) { malloc() };
+    ?{}( *s.inner, rhs );
+}
+
+void ?{}( string & s, long double rhs ) {
+    (s.inner) { malloc() };
+    ?{}( *s.inner, rhs );
+}
+
+void ?{}( string & s, double _Complex rhs ) {
+    (s.inner) { malloc() };
+    ?{}( *s.inner, rhs );
+}
+
+void ?{}( string & s, long double _Complex rhs ) {
+    (s.inner) { malloc() };
+    ?{}( *s.inner, rhs );
+}
+
 void ^?{}( string & s ) {
     ^(*s.inner){};
@@ -121,4 +151,33 @@
 }
 
+string & ?=?( string & s, ssize_t rhs ) {
+    (*s.inner) = rhs;
+    return s;
+}
+
+string & ?=?( string & s, size_t rhs ) {
+    (*s.inner) = rhs;
+    return s;
+}
+
+string & ?=?( string & s, double rhs ) {
+    (*s.inner) = rhs;
+    return s;
+}
+
+string & ?=?( string & s, long double rhs ) {
+    (*s.inner) = rhs;
+    return s;
+}
+
+string & ?=?( string & s, double _Complex rhs ) {
+    (*s.inner) = rhs;
+    return s;
+}
+
+string & ?=?( string & s, long double _Complex rhs ) {
+    (*s.inner) = rhs;
+    return s;
+}
 
 ////////////////////////////////////////////////////////
Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision dd10bf4147d92415385453a062d48db3c826aa3f)
+++ libcfa/src/collections/string.hfa	(revision a4ed165b3fb9a999f66e8ec4607eebc231a3ebfe)
@@ -40,4 +40,11 @@
 void ?{}(string & s, const char * c); // copy from string literal (NULL-terminated)
 void ?{}(string & s, const char * c, size_t size); // copy specific length from buffer
+
+void ?{}( string & s, ssize_t rhs );
+void ?{}( string & s, size_t rhs );
+void ?{}( string & s, double rhs );
+void ?{}( string & s, long double rhs );
+void ?{}( string & s, double _Complex rhs );
+void ?{}( string & s, long double _Complex rhs );
 
 string & ?=?(string & s, const string & c);
@@ -52,4 +59,11 @@
 static inline string & strcpy(string & s, const string & c) { s = c; return s; }
 static inline string & strncpy(string & s, const string & c, size_t n) { assign(s, c, n); return s; }
+
+string & ?=?( string & s, ssize_t rhs );
+string & ?=?( string & s, size_t rhs );
+string & ?=?( string & s, double rhs );
+string & ?=?( string & s, long double rhs );
+string & ?=?( string & s, double _Complex rhs );
+string & ?=?( string & s, long double _Complex rhs );
 
 void ^?{}(string & s);
Index: libcfa/src/collections/string_res.cfa
===================================================================
--- libcfa/src/collections/string_res.cfa	(revision dd10bf4147d92415385453a062d48db3c826aa3f)
+++ libcfa/src/collections/string_res.cfa	(revision a4ed165b3fb9a999f66e8ec4607eebc231a3ebfe)
@@ -25,4 +25,5 @@
 
 #include <assert.h>
+#include <complex.h>                           // creal, cimag
 
 //######################### VbyteHeap "header" #########################
@@ -333,4 +334,41 @@
 void ?{}(string_res & s, const char * rhs, size_t rhslnth) with(s) {
     eagerCopyCtorHelper(s, rhs, rhslnth);
+}
+
+void ?{}( string_res & s, ssize_t rhs ) {
+    char buf[64];
+    int len;
+    snprintf( buf, sizeof(buf)-1, "%zd%n", rhs, &len );
+    ( s ){ buf, len };
+}
+void ?{}( string_res & s, size_t rhs ) {
+    char buf[64];
+    int len;
+    snprintf( buf, sizeof(buf)-1, "%zu%n", rhs, &len );
+    ( s ){ buf, len };
+}
+void ?{}( string_res & s, double rhs ) {
+    char buf[64];
+    int len;
+    snprintf( buf, sizeof(buf)-1, "%g%n", rhs, &len );
+    ( s ){ buf, len };
+}
+void ?{}( string_res & s, long double rhs ) {
+    char buf[64];
+    int len;
+    snprintf( buf, sizeof(buf)-1, "%Lg%n", rhs, &len );
+    ( s ){ buf, len };
+}
+void ?{}( string_res & s, double _Complex rhs ) {
+    char buf[64];
+    int len;
+    snprintf( buf, sizeof(buf)-1, "%g+%gi%n", creal( rhs ), cimag( rhs ), &len );
+    ( s ){ buf, len };
+}
+void ?{}( string_res & s, long double _Complex rhs ) {
+    char buf[64];
+    int len;
+    snprintf( buf, sizeof(buf)-1, "%Lg+%Lgi%n", creall( rhs ), cimagl( rhs ), &len );
+    ( s ){ buf, len };
 }
 
@@ -577,4 +615,35 @@
 }
 
+string_res & ?=?( string_res & s, ssize_t rhs ) {
+    string_res rhs2 = rhs;
+    s = rhs2;
+    return s;
+}
+string_res & ?=?( string_res & s, size_t rhs ) {
+    string_res rhs2 = rhs;
+    s = rhs2;
+    return s;
+}
+string_res & ?=?( string_res & s, double rhs ) {
+    string_res rhs2 = rhs;
+    s = rhs2;
+    return s;
+}
+string_res & ?=?( string_res & s, long double rhs ) {
+    string_res rhs2 = rhs;
+    s = rhs2;
+    return s;
+}
+string_res & ?=?( string_res & s, double _Complex rhs ) {
+    string_res rhs2 = rhs;
+    s = rhs2;
+    return s;
+}
+string_res & ?=?( string_res & s, long double _Complex rhs ) {
+    string_res rhs2 = rhs;
+    s = rhs2;
+    return s;
+}
+
 // Copy assignment operator
 string_res & ?=?(string_res & s, const string_res & rhs) with( s ) {
Index: libcfa/src/collections/string_res.hfa
===================================================================
--- libcfa/src/collections/string_res.hfa	(revision dd10bf4147d92415385453a062d48db3c826aa3f)
+++ libcfa/src/collections/string_res.hfa	(revision a4ed165b3fb9a999f66e8ec4607eebc231a3ebfe)
@@ -94,4 +94,10 @@
     ?{}( s, src, mode, 0, (size(src) > maxlen)?maxlen:size(src) );
 }
+void ?{}( string_res & s, ssize_t rhs );
+void ?{}( string_res & s, size_t rhs );
+void ?{}( string_res & s, double rhs );
+void ?{}( string_res & s, long double rhs );
+void ?{}( string_res & s, double _Complex rhs );
+void ?{}( string_res & s, long double _Complex rhs );
 
 string_res & assign(string_res & s, const string_res & src, size_t maxlen); // copy specific length from other string
@@ -103,4 +109,11 @@
 string_res & ?=?(string_res & s, string_res & c);
 string_res & ?=?(string_res & s, char c);
+
+string_res & ?=?( string_res & s, ssize_t rhs );
+string_res & ?=?( string_res & s, size_t rhs );
+string_res & ?=?( string_res & s, double rhs );
+string_res & ?=?( string_res & s, long double rhs );
+string_res & ?=?( string_res & s, double _Complex rhs );
+string_res & ?=?( string_res & s, long double _Complex rhs );
 
 void ^?{}(string_res & s);
