elemental function string_concat_string_string(lhs, rhs) result(concat)
!< Concatenation with string.
!<
!<```fortran
!< type(string) :: astring
!< type(string) :: anotherstring
!< type(string) :: yetanotherstring
!< logical :: test_passed(1)
!< astring = 'Hello '
!< anotherstring = 'Bye bye'
!< yetanotherstring = astring.cat.anotherstring
!< test_passed(1) = yetanotherstring%chars()=='Hello Bye bye'
!< print '(L1)', all(test_passed)
!<```
!=> T <<<
class(string), intent(in) :: lhs !< Left hand side.
type(string), intent(in) :: rhs !< Right hand side.
type(string) :: concat !< Concatenated string.
character(kind=CK, len=:), allocatable :: temporary !< Temporary concatenated string.
temporary = ''
if (allocated(lhs%raw)) temporary = lhs%raw
if (allocated(rhs%raw)) temporary = temporary//rhs%raw
if (temporary/='') concat%raw = temporary
endfunction string_concat_string_string