On Mon, 2015-05-11 at 12:40 -0400, Michael Powell wrote: > > Imagine you write a library and you compile and distribute the > > binaries. Someone else builds against those. If std::set is used in > > your API, and they have a different version of libstdc++, do you still > > want the library and the binary to be compatible, even across > > different versions of libstdc++? > > Playing devil's advocate, I want interface compatibility. Indeed. But "interface" is part of both API and ABI so your statement doesn't help answer the question. If you want to be able to link against pre-compiled libraries, then you require *binary* interface compatibility. Making changes to the underlying type of a std:: type can break the ABI. If you're OK with recompiling everything yourself rather than using pre-compiled libraries, then you only require *program* interface compatibility. In this case it's straightforward to make those changes. Most people really require ABI stability for a library like libstdc++.