For a general purpose hash table that aims for both high performance and correctness, when, if ever, does it make sense to assume that hash equality implies logical equality?
To lay some ground rules for the question, assume either that all inputs are non-malicious or that a cryptographic quality hash function is used. In other words, hash collisions only occur by chance or cannot feasibly be generated intentionally (as best is publicly known). However, don't make any assumption about input number of bits or output number of bits. Let's also assume that all logically equal entities have equal hashes (i.e. ignore the possibility of an equality operator with unusual behavior).
Based on several internet sources including the stack network, the chance of a 256-bit hash collision is so small it can be considered impossible. For the SHA-family in particular, there does not exist a single known collision. Nonetheless, the major hash table implementations I'm familiar with do check for logical equality. Is this a sensible design choice or does it cater to an irrational fear? If the answer is more subtle, what factors affect the answer? (e.g. number of input bits, hash function used, program context?)
The implementations I'm most familiar with and interested in are from C++ (GNU's libstdc++ and LLVM's libc++) and Python. If the 64-bit hashes imposed in the C++ standard library affect the answer, please explain.