RFC: Default language standard mode policy

>
> Yes, those are real problems, but it's not reasonable for us to keep the
default at C++98/03 forever. GCC has already taken the plunge here, so a
lot of open-source code that doesn't work in C++11 onwards already
explicitly specifies an appropriate -std= flag.
>

Could you clarify exactly what the issue is? Currently, if I have some
legacy C++98 code, the odds are that it just compiles with ${CXX}. If I
have new C++11 or C++14 code, then its build system likely sticks on the
required -std= flag and it builds independent of what the compiler default
is.

Why should new C++ code pay this tax to use the language that is currently
called C++, that is taught as C++, that is covered by books on C++, and so
on? C++98 is increasingly the odd one out, and it's the one where an
explicit -std= flag should be required.

What code would be broken by keeping the default at the language version

accepted by code that didn’t know about newer standards?

Any code written for modern GCC. Any code written for modern MSVC.

As long as we’re keeping support for C++98 in the front end, keeping the

default there doesn’t seem particularly arduous for us and will avoid
breaking third-party code.

At some point (although probably not for at least a decade) I expect we
will want to remove C++98 support from Clang.

It doesn’t break anything for us and in general the proposal make sense to me.

Yours,
Andrey

Well, if the C++ language wouldn't change in backwards incompatible
ways, we wouldn't have this discussion. As I said before, the compiler
authors are not the one paying the price for the breakage they
introduce. We've been moderately good with LLVM/Clang to not introduce
miscompiled code in the name of exploiting random UB. Changing the C++
version falls into pretty much the same category. I don't even
understand your point about paying a "tax" for using newer C++ features.
I find it pretty much the reverse actually. It clearly documents
requirements and makes them auditable as well. Given the complex
compatibility/implementation status of C++ across different systems,
that's a good thing and not something bad.

Joerg