This patch introduces the mechanism through which libc++ can add, remove, or modify externally instantiated methods of std::string.
Under an unstable ABI, adding and removing external definitions is trivial. Under the stable ABI we are much more limited.
If we want to allow inlining of a external method in ABI v1 we can remove the extern template declaration while
retaining the extern template definition New code will no longer generate out-of-line calls to that method, but
old code will continue to work since the definition is still present.
At the same time, we can define but not declare new out-of-line methods in the stable ABI. Staging these definitions
for use in the future, after all supported dylibs contain them.
This allows code to perform and inline std::string roughly the same across both ABI's. Meaning std::string
should retain the same performance characteristics regardless of ABI.
ABI breaking changes are guarded by _LIBCPP_ABI_STRING_OPTIMIZED_EXTERNAL_INSTANTIATIONS, but n
We should probably not outline this ctor before we do the 'init_long_external'