GCC from 11 onwards defaults to -std=gnu++17 for C++ source files. We want to do the same
(https://discourse.llvm.org/t/c-objc-switch-to-gnu-17-as-the-default-dialect/64360).
Add __cplusplus < 201703L, adjust -verify, or add -std=c++14 so that tests
will pass regardless of gnu++14/gnu++17 default.
We have a desire to mark a test compatible with multiple language standards.
There are ongoing discussions how to add markers in the long term:
- https://discourse.llvm.org/t/iterating-lit-run-lines/62596
- https://discourse.llvm.org/t/lit-run-a-run-line-multiple-times-with-different-replacements/64932
As a workaround in the short term, add lit substitutions %std_cxx98-,
%std_cxx11-14, etc. They can be used for tests which work across multiple
language standards. If a range has n standards, run lit multiple times, with
LIT_CLANG_STD_GROUP=0, LIT_CLANG_STD_GROUP=1, etc to cover all n standards.
I'm not really keen on this sort of change because it loses test coverage for other language standard versions. We usually try to write our tests to be standard version agnostic and only specify a specific language mode only when absolutely necessary, which doesn't seem to be the case for a lot of the tests in this patch (like this one).