What are qualified-id/name and unqualified-id/name?

A qualified name is one that has some sort of indication of where it belongs, e.g. a class specification, namespace specification, etc. An unqualified name is one that isn't qualified.

Read James McNellis' answer here:

What is a nested name specifier?

Given:

struct  A {
    struct B {
        void F();
    };
};
  • A is an unqualified-id.
  • ::A is a qualified-id but has no nested-name-specifier.
  • A::B is a qualified-id and A:: is a nested-name-specifier.
  • ::A::B is a qualified-id and A:: is a nested-name-specifier.
  • A::B::F is a qualified-id and both B:: and A::B:: are nested-name-specifiers.
  • ::A::B::F is a qualified-id and both B:: and A::B:: are nested-name-specifiers.


A qualified name is one that specifies a scope.
Consider the following sample program, the references to cout and endl are qualified names:

#include <iostream>

int main()  
{
   std::cout<<"Hello world!"<<std::endl;
   return 0;
}

Notice that the use of cout and endl began with std::. These make them Qualified names.

If we brought cout and endl into scope by a using declaration or directive*(such as using namespace std;), and used just cout and endl just by themselves , they would have been unqualified names, because they would lack the std::.