If those are the motivations, we should have an ImmutableList class without an add function, and derive the List with an add function from it (in C++, probably by private inheritance, that is, inheritance of implementation). Only the List class with the (working) add should publically inherit from the interface with an add function.
This is a bad solution. If List inherits from ImmutableList, this implies that List is an ImmutableList. Since that is not the case, this is obviously a bad design.
Also, your solution would be impossible to implement if you don't have control over the List class. For example, the List class could be a part of a component you can't modify, or even a part of your programming language.
Using a password like "CD" or "book" is a very bad idea, but using the password "0441328008-sand" (the ISBN of my copy of Heretics of Dune, which I just picked at random out of my 1000+ books, plus a random word relating to the book), isn't something that's easily guessable.
Furthermore, until it gets firmly implanted in my tactile memory, I just have to remember "Heretics of Dune" rather than a long ugly string of numbers.
Even "0441328008-sand" can be easy to guess if someone sees you peek inside the book every time before you login. Then your password is about as "safe" as it would be with a post-it note on the monitor.
This is a bad solution. If List inherits from ImmutableList, this implies that List is an ImmutableList. Since that is not the case, this is obviously a bad design.
Also, your solution would be impossible to implement if you don't have control over the List class. For example, the List class could be a part of a component you can't modify, or even a part of your programming language.
However, XFree86 doesn't seem special in this way:
"freesex" gives a warning, "freesex sex" doesn't.
"freeporn" gives a warning, "freeporn porn" doesn't.