It's not ADT, it's strict types. The reason you can't do "parse, don't validate" in C++ is because you can't assume anything is valid at the point you use the data.
What ADT does is give you enough flexibility so that a strict typing system doesn't suck.
What ADT does is give you enough flexibility so that a strict typing system doesn't suck.