Consider having String not inherit from Iterable<Character> but have operator Iterable<Character> and then internally have UNION of shared_ptr and something like string_view
OR - maybe do this at the ITERABLE level.
IT could have such a union!
It MAY make mcuh more complex. It would be hard to get working. But could be big perfpormance boost allowing constexpr String, and constexpr other Iterables.