title: CV-qualified base classes in C++
body: <p>While refactoring some C++11 code, I stumbled upon a strange thing. Namely, it seems to be impossible to define a CV-qualified (<code>const</code>, <code>volatile</code> or <code>const volatile</code>) base class, e.g:</p>
  
  <pre><code>struct A { int a = 0; };
  struct B: A const {}; // Error here with Clang and GCC!
  </code></pre>
  
  <p>However, the following compiles without errors:</p>
  
  <pre><code>struct A { int a = 0; };
  using AC = A const;
  struct B: AC {};      // NO ERROR HERE!? Qualifiers are ignored.
  int main() {
    B b;
    b.a = 42;           // NO ERROR modifying a field of const base.
    return b.a;
  }
  </code></pre>
  
  <p>I have two questions:</p>
  
  <ol>
  <li>What in the C++ standards prohibits defining a CV-qualified base class, if at all?</li>
  <li>Why does the second example compile?</li>
  </ol>
  
  <p>PS: Since this is a <kbd>language-lawyer</kbd> question, please provide references to the C++ standard.</p>