In JSONNode::at() and friends, if JSON_SAFE is off, the compiler will detect and warn that the function does not return anything at the end (since it doesn't throw without _SAFE defined).
I understand this is done for speed, but it should at least do something.
* exit(1) but you may not want your unit tests or production code failing like that.
* return *this ... it is returning the wrong node, but at least its returning something. The library user should either use exceptions or define JSON_FAIL, and check that before using the returned value.
* Define a special static "error" JSONNode that can be returned in such situations. I suppose it could be put in protected memory so if the library user tries to do anything with the node, then the OS will detect the problem.
* Create a new blank node and return that. Memory leaks could be a problem if reference counting doesn't work in this case.