A chave está bem aqui:
The first C++ compiler (Cfront) was written in C++. To build that, I first used C to write a "C with Classes"-to-C preprocessor. "C with Classes" was a C dialect that became the immediate ancestor to C++. That preprocessor translated "C with Classes" constructs (such as classes and constructors) into C. It was a traditional preprocessor that didn't understand all of the language, left most of the type checking for the C compiler to do, and translated individual constructs without complete knowledge. I then wrote the first version of Cfront in "C with Classes".
Portanto, a primeira versão do Cfront não foi escrita em C ++, e sim no idioma intermediário. A capacidade de criar compiladores C e pré-processadores diretamente em C levou a muitas das inovações (e brechas de segurança maciças ) em C. Então você escreve seu novo pré-processador que transforma seu código" C com Classes "em C simples (porque C direto pode fazer qualquer coisa) e então você usa" C com Classes "para escrever um compilador de C ++ (não que você não pudesse fazer isto em C, só levaria algum tempo) e então você usa aquele compilador de C ++ para escrever um compilador mais effecient / complete em C ++. Entendeu?