Simple adapter does not stop someone from doing memory magic can getting the wrapped object.
It protects from those who will search for underlying type definition to check what it can do and using its methods. Making your code foolproof can save you from long refactoring or even reverting some files or from searching for some elusive bugs.
Implementation code and documentation don't mix well from my experience.
If an implementation needs to be documented (or worse yet -- requires a user to read its source code to figure out what it does), then the implementation is faulty.
An interface, on the other hand is where documentation belongs. If any ambiguity exists in the interface documentation, then either the documentation or the interface itself is faulty.
@LB
So you don't like the C library. Don't care for and refuse to use PHP. Are struggling understanding languages with weak/dynamic typing (Python/Javascript per your example). So is there a language besides C++ that you like?
Java's OK, besides the garbage collection. Unfortunately I don't really have the time I'd like to be able to get familiar with other languages and possibly like them.
That is a shame. Sorry, didn't mean to derail your thread, but I was curious after our discussion on PHP, your C comment here, and the other recent thread.
It helps against those who might violate type safety (try to use underlying type instead of alias, or pass alias to function expecting underlying type) and helps to hide implementation details.