please see the following code
struct A { using type = int; };
struct B : private A {};
struct C : B { using base_type = A; };
All of gcc 6.1, clang 3.8, and msvc 2015 update 3 refuse to compile this, as A is not an accessible name inside C since A is a private base of B. It seems that gcc thinks A in using base_type = A refers to the default constructor of A. msvc and clang seem not.
Perhaps the compilation error is due to the injection of names triggered by inheritances (because modifying using base_type = A into using base_type = ::A make all the compilers work fine), but I want to know if this weird error is what the standard says.
More concretely,
- As I understood, not like A::type,Ais just a class name (although gcc misinterprets it as a function name) which is introduced toCnot insideAnorB. Why this name is considered private toB?
- Should this compilation error be considered a bug, or is an edge case of the specifications of the standard?
 
     
     
    