Every public element in your API is a promise. a promise that you will support that functionality for the lifetime of the API. You can break that promise, but doing do many frustrate your clients and cause them to rewrite their code. Even worse, they may decide to abandon your API because they have grown weary of continually having to fix up their code because you can’t keep your API stable or they may simply not to be able to use your API anymore because you have removed functionality that supported their unique use case.
API Design for C++. page 46 (2.3.1)