Unless you intentionally put two things with the same name in the same namespace and they aren't overloaded functions, there are no natural name collisions in C++
You got an example of one right at the first post in this topic. The names may not be in the same namespace, but they are accessed unqualified (which is how you usually do it), which leads to a name collision.
I'm not interested in technical discussions, I am talking about things that happen in practice here. That is, you got an ambigious identifier, your compiler will complain, you are unhappy.