Returned object is implicitly convertible to const To* and
has two properties: ptr to access C string as const To*
and buffPtr to access it as To*.

The temporary C string is valid unless returned object is destroyed.
Thus if returned object is assigned to a variable the temporary is
valid unless the variable goes out of scope. If returned object isn't
assigned to a variable it will be destroyed at the end of creating
primary expression.