I use it sometimes to catch mistakes made by the programmer. If I have function that assumes that a parameter is not null assert(p != nullptr); or within some range assert(pos < size); etc. Never use it to catch invalid input from the user! assert can be disabled by defining the macro NDEBUG so I don't have to pay the cost of these checks when running the real thing.
Haha ops... My eyes must be getting old. I somehow thought you wrote <cassert>. Well, in that case just ignore what I said.
I have never used errno in C++. I think I have used errno in C but I don't remember really and I don't use C much. I think there are often better ways to signal errors than to use errno.