https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84667
--- Comment #2 from Elmar Stellnberger <estellnb at elstel dot org> --- Princess17b29a just found out that the problem can be resolved by adding the const keyword to the constructor in line 233: inline xstrbuf( const xstrbuf& s ) ... ... as neither "xstrbuf( base_str_const s )" nor "xstrbuf& operator = ( base_str_const s )" are used directly. An error message of clang has hinted us to do so: test_it.cpp:11:11: error: no viable constructor copying variable of type 'estrbuf' (aka 'xstrbuf<short>') estrbuf copybuf1 = varbuf4.as_const(); // copybuf.bufParams = xstrbuf_constBuf; ^ ~~~~~~~~~~~~~~~~~~ ./auxtypes.h:233:10: note: candidate constructor not viable: expects an l-value for 1st argument inline xstrbuf( xstrbuf& s ) : base_str( s ) { bufParams = s.bufParams | xstrbuf_bufUserAllocatedBit; }; // new xstrbuf then holds a temporary copy of the initial xstrbuf ^ 1 error generated.