C/C++ standards

The C and C++ standards we would choose would be independent of one another. So we would choose between C89, C90, C99, C11 and C18, and then between C++98, C++03, C++11, C++14 and C++17. There is some C++ in the Graphviz tree, e.g. lib/vpsc/.

Some opinionated thoughts… The main win of going to C99 would be mixing variable declarations and code, i.e. not having to declare all variables at the start of a function. I don’t think it’s worth refactoring existing code for this, but we could at least write new code this way. IME having a variable declaration closer to where it is used significantly decreases the likelihood of bugs. The main win of going to C++11 would be, as you said, smart pointers and thus not having to do manual memory management. Range-based for loops are also a nice syntactic win that reduces the visual noise around iterating over a collection.

I would guess the oldest environments we need to support are some *nix (Windows and macOS seem to discourage running ancient toolchains). C++11 support is feature complete as of GCC 4.8.1 and it looks like all the features we would use are supported as of GCC 4.6. C99 support is feature complete as of GCC 4.5. Do you think it’s reasonable to set a baseline requirement of GCC 4.6?