El C++ (el primer estándar 98) desciende, es un derivado, del C95 (C90 más las correcciones de 1995). Luego, el C99 y el C++11 son los dos derivados de ese mismo ancestro común, el C95. Entonces, esto quiere decir que el C++11, C++14, C++17 y C++20 son primos, primos 2dos, etc. del C99, tienen al C95 como abuelito en común.
En esta página hay una lista con incompatibilidades entre C++98 y C99:
http://david.tribble.com/text/cdiffs.htm
Por ejemplo, palabras clave del C++98 que no va a reconocer un compilador C99:
Una lista completa de lo que hace que un programa C++ no compile en C es bastante extensa, los temas serían:
En esta página hay una lista con incompatibilidades entre C++98 y C99:
http://david.tribble.com/text/cdiffs.htm
Por ejemplo, palabras clave del C++98 que no va a reconocer un compilador C99:
- bool
- catch
- class
- const_cast
- delete
- dynamic_cast
- explicit
- export
- false
- friend
- mutable
- namespace
- new
- operator
- private
- protected
- public
- reinterpret_cast
- static_cast
- template
- this
- throw
- true
- try
- typeid
- typename
- using
- virtual
- wchar_t
Una lista completa de lo que hace que un programa C++ no compile en C es bastante extensa, los temas serían:
- Uniones anónimas
- clases
- constructores y destructores
- excepciones y bloques try/catch
- linkeo de funciones externas (extern "C")
- sobrecarga de funciones
- funciones miembro
- namespaces
- operadores y funciones new / delete
- sobrecarga de operadores
- referencias
- STL (biblioteca estándar C++)
- clases y funciones template