This header is intentionally valid in C++14 mode, because no conforming C++14 program will try to include <charconv> and so it's OK to add new (non-reserved in C++14) names to namespace std. However, other headers must not include <charconv> transitively prior to C++17, so that we don't add those non-reserved names without the user requesting it.
This adds a comment to the header explaining that. * include/std/charconv: Add comment. Tested powerpc64le-linux, committed to master.
commit cfbc8fbb37e7b406ab2567ac35629793d4b499e7 Author: Jonathan Wakely <jwak...@redhat.com> Date: Mon Feb 17 15:44:03 2020 +0000 libstdc++: Add comment to <charconv> explaining C++14 status This header is intentionally valid in C++14 mode, because no conforming C++14 program will try to include <charconv> and so it's OK to add new (non-reserved in C++14) names to namespace std. However, other headers must not include <charconv> transitively prior to C++17, so that we don't add those non-reserved names without the user requesting it. This adds a comment to the header explaining that. * include/std/charconv: Add comment. diff --git a/libstdc++-v3/include/std/charconv b/libstdc++-v3/include/std/charconv index 9b5a1f7cab8..ff7dfa12268 100644 --- a/libstdc++-v3/include/std/charconv +++ b/libstdc++-v3/include/std/charconv @@ -31,6 +31,10 @@ #pragma GCC system_header +// As an extension we support <charconv> in C++14, but this header should not +// be included by any other library headers in C++14 mode. This ensures that +// the names defined in this header are not added to namespace std unless a +// user explicitly includes <charconv> in C++14 code. #if __cplusplus >= 201402L #include <type_traits>