Microsoft's Visual C++ compiler has a specific compiler warning, C4503, about truncating decorated names that are longer than the compiler limit (4096 chars). Their description for the warning claims
The correctness of the program, however, is unaffected by the truncated name.
How could this be?
In my mental model of compilation and linking, the decorated symbol name that is output by the compiler is the only thing that associates a particular function between the object that implements it and the one where it is used, allowing the two to be connected at link time. If two different functions have identifiers that are long enough to get truncated, and the part remaining after truncation is the same, how is it possible that the linker could possibly keep them straight?
Your mental model is correct. In case of conflict you get link errors. The message for that warning is just a short description of a very common occurrence that the compiler emits - it isn't a complete explanation of all the possible ramifications that can occur, you're just supposed to know.
For the full explanation - including mentioning the problem with the linker and also the debugger - see the MSDN article.