Message ID | 20180615155239.GT6295@redhat.com |
---|---|
State | New |
Headers | show |
Series | RFC: What should go in our <version> header? | expand |
On 06/15/2018 11:52 AM, Jonathan Wakely wrote: > C++20 adds a <version> header, which should define all the library > feature test macros, as well as implementation-specific macros like > _GLIBCXX_RELEASE and __GLIBCXX__. > > We should decide whether to implement <version> by simply including > <bits/c++config.h> and then adding the feature test macros, or if we > should keep it minimal and *only* define _GLIBCXX_RELEASE and > __GLIBCXX__ and the feature tests (and then have <bits/c++config.h> > include <version>?) > > I think I prefer to make <version> just include <bits/c++config.h>. > > I think we should define the feature-test macros in both <version> and > the relevant header (e.g. __cpp_string_view in <string_view>). We > could make everything include <version> and then every header would > define every feature test macro, but I don't think that's good for > portability. > > My preference is implemented by the attached patch. > This is pretty much what I was looking at doing. I say go! > > While on the subject, should we just delete some of this autoconf-junk > from our c++config.h headers? > > /* Name of package */ > /* #undef _GLIBCXX_PACKAGE */ > > /* Define to the address where bug reports for this package should be > sent. */ > #define _GLIBCXX_PACKAGE_BUGREPORT "" > > /* Define to the full name of this package. */ > #define _GLIBCXX_PACKAGE_NAME "package-unused" > > /* Define to the full name and version of this package. */ > #define _GLIBCXX_PACKAGE_STRING "package-unused version-unused" > > /* Define to the one symbol short name of this package. */ > #define _GLIBCXX_PACKAGE_TARNAME "libstdc++" > > /* Define to the home page for this package. */ > #define _GLIBCXX_PACKAGE_URL "" > > /* Define to the version of this package. */ > #define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused" > I don't have an opinion here except if this is unused cruft let's lose it. I think we *are* supposed to have some project and version identification. We have _GLIBCXX_* everywhere. The folks that use libstdc++ *outside* of g++ might have some opinions about this too. Ed
On Sun, 17 Jun 2018 at 17:49, Ed Smith-Rowland wrote: > > On 06/15/2018 11:52 AM, Jonathan Wakely wrote: > > My preference is implemented by the attached patch. > > > This is pretty much what I was looking at doing. I say go! Thanks for the feedback, I'll add <version> later today. > > While on the subject, should we just delete some of this autoconf-junk > > from our c++config.h headers? > > > > /* Name of package */ > > /* #undef _GLIBCXX_PACKAGE */ > > > > /* Define to the address where bug reports for this package should be > > sent. */ > > #define _GLIBCXX_PACKAGE_BUGREPORT "" > > > > /* Define to the full name of this package. */ > > #define _GLIBCXX_PACKAGE_NAME "package-unused" > > > > /* Define to the full name and version of this package. */ > > #define _GLIBCXX_PACKAGE_STRING "package-unused version-unused" > > > > /* Define to the one symbol short name of this package. */ > > #define _GLIBCXX_PACKAGE_TARNAME "libstdc++" > > > > /* Define to the home page for this package. */ > > #define _GLIBCXX_PACKAGE_URL "" > > > > /* Define to the version of this package. */ > > #define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused" > > > I don't have an opinion here except if this is unused cruft let's lose > it. I think we *are* supposed to have some project and version > identification. We have _GLIBCXX_* everywhere. The folks that use > libstdc++ *outside* of g++ might have some opinions about this too. I think they're more likely to use _GLIBCXX_RELEASE (and maybe __GLIBCXX__ although that's not very useful) as documented at https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_macros.html The PACKAGE_* macros are defined by autoconf for the package's own use, typically for the output of "cmd --version" and for naming tarballs. Libstdc++ isn't a standalone package, doesn't have a --version option, and isn't distributed in its own tarball.
On 17 June 2018 at 19:49, Ed Smith-Rowland <3dw4rd@verizon.net> wrote: > On 06/15/2018 11:52 AM, Jonathan Wakely wrote: >> >> C++20 adds a <version> header, which should define all the library >> feature test macros, as well as implementation-specific macros like >> _GLIBCXX_RELEASE and __GLIBCXX__. >> >> We should decide whether to implement <version> by simply including >> <bits/c++config.h> and then adding the feature test macros, or if we >> should keep it minimal and *only* define _GLIBCXX_RELEASE and >> __GLIBCXX__ and the feature tests (and then have <bits/c++config.h> >> include <version>?) >> >> I think I prefer to make <version> just include <bits/c++config.h>. >> >> I think we should define the feature-test macros in both <version> and >> the relevant header (e.g. __cpp_string_view in <string_view>). We >> could make everything include <version> and then every header would >> define every feature test macro, but I don't think that's good for >> portability. >> >> My preference is implemented by the attached patch. >> > This is pretty much what I was looking at doing. I say go! +1 looks reasonable to me.
On 18/06/18 15:12 +0300, Ville Voutilainen wrote: >On 17 June 2018 at 19:49, Ed Smith-Rowland <3dw4rd@verizon.net> wrote: >> On 06/15/2018 11:52 AM, Jonathan Wakely wrote: >>> >>> C++20 adds a <version> header, which should define all the library >>> feature test macros, as well as implementation-specific macros like >>> _GLIBCXX_RELEASE and __GLIBCXX__. >>> >>> We should decide whether to implement <version> by simply including >>> <bits/c++config.h> and then adding the feature test macros, or if we >>> should keep it minimal and *only* define _GLIBCXX_RELEASE and >>> __GLIBCXX__ and the feature tests (and then have <bits/c++config.h> >>> include <version>?) >>> >>> I think I prefer to make <version> just include <bits/c++config.h>. >>> >>> I think we should define the feature-test macros in both <version> and >>> the relevant header (e.g. __cpp_string_view in <string_view>). We >>> could make everything include <version> and then every header would >>> define every feature test macro, but I don't think that's good for >>> portability. >>> >>> My preference is implemented by the attached patch. >>> >> This is pretty much what I was looking at doing. I say go! > >+1 looks reasonable to me. Here's what I've committed, which adds tests and also defines __STDCPP_MATH_SPEC_FUNCS__ in <version>. I've also added this and the new C++17 headers to the <bits/stdc++.h> precompiled header. commit af8c87bcb7341e6bf0d4faec17c30df29748d4df Author: Jonathan Wakely <jwakely@redhat.com> Date: Fri Jun 15 15:35:38 2018 +0100 P0754R2 <version> header * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/bits/c++config: Change doxygen comment to suggest <version> instead of <iosfwd>. * include/precompiled/stdc++.h: Include <cwchar> and <cwctype> unconditionally. Add C++17 and C++20 headers. * include/std/version: New header. * testsuite/17_intro/headers/c++2017/all_attributes.cc: New. * testsuite/17_intro/headers/c++2017/all_no_exceptions.cc: New. * testsuite/17_intro/headers/c++2017/all_no_rtti.cc: New. * testsuite/17_intro/headers/c++2017/all_pedantic_errors.cc: New. * testsuite/17_intro/headers/c++2017/operator_names.cc: New. * testsuite/17_intro/headers/c++2017/stdc++.cc: New. * testsuite/17_intro/headers/c++2017/stdc++_multiple_inclusion.cc: New. * testsuite/17_intro/headers/c++2020/all_attributes.cc: New. * testsuite/17_intro/headers/c++2020/all_no_exceptions.cc: New. * testsuite/17_intro/headers/c++2020/all_no_rtti.cc: New. * testsuite/17_intro/headers/c++2020/all_pedantic_errors.cc: New. * testsuite/17_intro/headers/c++2020/operator_names.cc: New. * testsuite/17_intro/headers/c++2020/stdc++.cc: New. * testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc: New. * testsuite/18_support/headers/version/macros.cc: New. * testsuite/18_support/headers/version/macros.cc: New. diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 77e6dc2f6be..f91907df325 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -80,7 +80,8 @@ std_headers = \ ${std_srcdir}/utility \ ${std_srcdir}/valarray \ ${std_srcdir}/variant \ - ${std_srcdir}/vector + ${std_srcdir}/vector \ + ${std_srcdir}/version bits_srcdir = ${glibcxx_srcdir}/include/bits bits_builddir = ./bits diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 4a096a198db..c0b89f481d8 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -24,7 +24,7 @@ /** @file bits/c++config.h * This is an internal header file, included by other library headers. - * Do not attempt to use it directly. @headername{iosfwd} + * Do not attempt to use it directly. @headername{version} */ #ifndef _GLIBCXX_CXX_CONFIG_H diff --git a/libstdc++-v3/include/precompiled/stdc++.h b/libstdc++-v3/include/precompiled/stdc++.h index adcd7bf312c..9b056bb3467 100644 --- a/libstdc++-v3/include/precompiled/stdc++.h +++ b/libstdc++-v3/include/precompiled/stdc++.h @@ -47,6 +47,8 @@ #include <cstdlib> #include <cstring> #include <ctime> +#include <cwchar> +#include <cwctype> #if __cplusplus >= 201103L #include <ccomplex> @@ -57,8 +59,6 @@ #include <cstdint> #include <ctgmath> #include <cuchar> -#include <cwchar> -#include <cwctype> #endif // C++ @@ -123,6 +123,19 @@ #endif #if __cplusplus >= 201703L +#include <any> #include <charconv> +// #include <execution> #include <filesystem> +#include <optional> +// #include <memory_resource> +#include <string_view> +#include <variant> +#endif + +#if __cplusplus > 201703L +// #include <compare> +// #include <span> +// #include <syncstream> +#include <version> #endif diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version new file mode 100644 index 00000000000..08036ff63f2 --- /dev/null +++ b/libstdc++-v3/include/std/version @@ -0,0 +1,134 @@ +// -*- C++ -*- Libstdc++ version details header. + +// Copyright (C) 2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +/** @file version + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + */ + +#ifndef _GLIBCXX_VERSION_INCLUDED +#define _GLIBCXX_VERSION_INCLUDED + +#pragma GCC system_header + +#include <bits/c++config.h> + +// c++03 +#define __cpp_lib_incomplete_container_elements 201505 + +#if !defined(__STRICT_ANSI__) +// gnu++03 +# define __cpp_lib_uncaught_exceptions 201411 +#endif + +#if __cplusplus >= 201103L +// c++11 +#define __cpp_lib_allocator_is_always_equal 201411 +#define __cpp_lib_allocator_traits_is_always_equal 201411 +#define __cpp_lib_is_null_pointer 201309 +#define __cpp_lib_result_of_sfinae 201210 +#define __cpp_lib_shared_ptr_arrays 201603 + +#if !defined(__STRICT_ANSI__) +// gnu++11 +# define __cpp_lib_enable_shared_from_this 201603 +# define __cpp_lib_is_swappable 201603 +# define __cpp_lib_void_t 201411 +#endif + +// For C++11 and later we support ISO/IEC 29124 Mathematical Special Functions +#define __STDCPP_MATH_SPEC_FUNCS__ 201003L + +#if __cplusplus >= 201402L +// c++14 +#define __cpp_lib_chrono_udls 201304 +#define __cpp_lib_complex_udls 201309 +#define __cpp_lib_exchange_function 201304 +#define __cpp_lib_generic_associative_lookup 201304 +#define __cpp_lib_integer_sequence 201304 +#define __cpp_lib_integral_constant_callable 201304 +#define __cpp_lib_is_final 201402L +#define __cpp_lib_make_reverse_iterator 201402 +#define __cpp_lib_make_unique 201304 +#define __cpp_lib_quoted_string_io 201304 +#define __cpp_lib_robust_nonmodifying_seq_ops 201304 +#define __cpp_lib_shared_timed_mutex 201402 +#define __cpp_lib_string_udls 201304 +#define __cpp_lib_transformation_trait_aliases 201304 +#define __cpp_lib_transparent_operators 201510 +#define __cpp_lib_tuple_element_t 201402L +#define __cpp_lib_tuples_by_type 201304 + +#if __cplusplus >= 201703L +// c++17 +#define __cpp_lib_addressof_constexpr 201603 +#define __cpp_lib_apply 201603 +#define __cpp_lib_array_constexpr 201603 +#define __cpp_lib_as_const 201510 +#define __cpp_lib_atomic_is_always_lock_free 201603 +#define __cpp_lib_bool_constant 201505 +#define __cpp_lib_boyer_moore_searcher 201603 +#define __cpp_lib_byte 201603 +#define __cpp_lib_chrono 201611 +#define __cpp_lib_clamp 201603 +#define __cpp_lib_constexpr_char_traits 201611 +#define __cpp_lib_enable_shared_from_this 201603 +#define __cpp_lib_filesystem 201703 +#define __cpp_lib_gcd 201606 +#define __cpp_lib_gcd_lcm 201606 +#define __cpp_lib_has_unique_object_representations 201606 +#define __cpp_lib_hypot 201603 +#define __cpp_lib_invoke 201411 +#define __cpp_lib_is_aggregate 201703 +#define __cpp_lib_is_invocable 201703 +#define __cpp_lib_is_swappable 201603 +#define __cpp_lib_launder 201606 +#define __cpp_lib_lcm 201606 +#define __cpp_lib_logical_traits 201510 +#define __cpp_lib_make_from_tuple 201606 +#define __cpp_lib_map_insertion 201411 +#define __cpp_lib_map_try_emplace 201411 +#define __cpp_lib_math_special_functions 201603L +#define __cpp_lib_node_extract 201606 +#define __cpp_lib_nonmember_container_access 201411 +#define __cpp_lib_not_fn 201603 +#define __cpp_lib_optional 201603 +#define __cpp_lib_sample 201603 +#define __cpp_lib_scoped_lock 201703 +#define __cpp_lib_shared_mutex 201505 +#define __cpp_lib_shared_ptr_weak_type 201606 +#define __cpp_lib_string_view 201603 +#define __cpp_lib_type_trait_variable_templates 201510L +#define __cpp_lib_unordered_map_insertion 201411 +#define __cpp_lib_unordered_map_try_emplace 201411 +#define __cpp_lib_void_t 201411 + +#if __cplusplus > 201703L +// c++2a +#endif // C++2a +#endif // C++17 +#endif // C++14 +#endif // C++11 + +#endif // _GLIBCXX_VERSION_INCLUDED diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc new file mode 100644 index 00000000000..0a92ae683a4 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc @@ -0,0 +1,41 @@ +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// { dg-options "-std=gnu++17" } +// { dg-do compile } + +// Ensure the library only uses the __name__ form for attributes. +// Don't test 'const' and 'noreturn' because they are reserved anyway. +#define abi_tag 1 +#define always_inline 1 +#ifndef __APPLE__ +// darwin headers use this, see PR 64883 +# define visibility 1 +#endif +#define packed 1 +#define pure 1 +// glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM. +#ifndef __arm__ +#define unused 1 +#endif + +#include <bits/extc++.h> + +int +main() +{ +} diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_exceptions.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_exceptions.cc new file mode 100644 index 00000000000..5b12b00d9aa --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_exceptions.cc @@ -0,0 +1,21 @@ +// { dg-do compile } +// { dg-options "-std=gnu++17 -fno-exceptions" } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <bits/extc++.h> diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_rtti.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_rtti.cc new file mode 100644 index 00000000000..3717ccf90a3 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_no_rtti.cc @@ -0,0 +1,21 @@ +// { dg-do compile } +// { dg-options "-std=gnu++17 -fno-rtti" } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <bits/extc++.h> diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_pedantic_errors.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_pedantic_errors.cc new file mode 100644 index 00000000000..bf391d3e1ed --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_pedantic_errors.cc @@ -0,0 +1,21 @@ +// { dg-do compile } +// { dg-options "-std=gnu++17 -pedantic-errors" } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <bits/extc++.h> diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/operator_names.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/operator_names.cc new file mode 100644 index 00000000000..c0b94de8aae --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/operator_names.cc @@ -0,0 +1,30 @@ +// { dg-do compile } +// { dg-options "-std=gnu++17 -fno-operator-names" } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// libstdc++/47662 + +// Avoid using PCH +#include <cerrno> +#include <bits/stdc++.h> +#include <bits/stdtr1c++.h> +#include <bits/extc++.h> + +int or, xor, and; + diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++.cc new file mode 100644 index 00000000000..bafc7d4c7be --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++.cc @@ -0,0 +1,70 @@ +// FreeBSD wants warning clean system headers: +// { dg-options "-std=gnu++17" } +// { dg-additional-options "-Wall -Wsystem-headers" { target *-*-freebsd* *-*-dragonfly* } } +// { dg-do compile } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 17.4.1.2 Headers + +#include <bits/stdc++.h> + +// "C" compatibility headers +#include <assert.h> +#ifdef _GLIBCXX_HAVE_COMPLEX_H +#include <complex.h> +#endif +#include <ctype.h> +#include <errno.h> +#ifdef _GLIBCXX_HAVE_FENV_H +#include <fenv.h> +#endif +#include <float.h> +#ifdef _GLIBCXX_HAVE_INTTYPES_H +#include <inttypes.h> +#endif +#include <iso646.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <setjmp.h> +#include <signal.h> +#include <stdarg.h> +#ifdef _GLIBCXX_HAVE_STDBOOL_H +#include <stdbool.h> +#endif +#include <stddef.h> +#ifdef _GLIBCXX_HAVE_STDINT_H +#include <stdint.h> +#endif +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _GLIBCXX_HAVE_TGMATH_H +#include <tgmath.h> +#endif +#include <time.h> +#if __has_include(<uchar.h>) +#include <uchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCHAR_H +#include <wchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCTYPE_H +#include <wctype.h> +#endif diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++_multiple_inclusion.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++_multiple_inclusion.cc new file mode 100644 index 00000000000..5684558ff75 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/stdc++_multiple_inclusion.cc @@ -0,0 +1,117 @@ +// FreeBSD wants warning clean system headers: +// { dg-options "-std=gnu++17" } +// { dg-additional-options "-Wall -Wsystem-headers" { target *-*-freebsd* *-*-dragonfly* } } +// { dg-do compile } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 17.4.1.2 Headers + +#include <bits/stdc++.h> + +// "C" compatibility headers +#include <assert.h> +#ifdef _GLIBCXX_HAVE_COMPLEX_H +#include <complex.h> +#endif +#include <ctype.h> +#include <errno.h> +#ifdef _GLIBCXX_HAVE_FENV_H +#include <fenv.h> +#endif +#include <float.h> +#ifdef _GLIBCXX_HAVE_INTTYPES_H +#include <inttypes.h> +#endif +#include <iso646.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <setjmp.h> +#include <signal.h> +#include <stdarg.h> +#ifdef _GLIBCXX_HAVE_STDBOOL_H +#include <stdbool.h> +#endif +#include <stddef.h> +#ifdef _GLIBCXX_HAVE_STDINT_H +#include <stdint.h> +#endif +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _GLIBCXX_HAVE_TGMATH_H +#include <tgmath.h> +#endif +#include <time.h> +#if __has_include(<uchar.h>) +#include <uchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCHAR_H +#include <wchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCTYPE_H +#include <wctype.h> +#endif + +#include <bits/stdc++.h> + +// "C" compatibility headers +#include <assert.h> +#ifdef _GLIBCXX_HAVE_COMPLEX_H +#include <complex.h> +#endif +#include <ctype.h> +#include <errno.h> +#ifdef _GLIBCXX_HAVE_FENV_H +#include <fenv.h> +#endif +#include <float.h> +#ifdef _GLIBCXX_HAVE_INTTYPES_H +#include <inttypes.h> +#endif +#include <iso646.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <setjmp.h> +#include <signal.h> +#include <stdarg.h> +#ifdef _GLIBCXX_HAVE_STDBOOL_H +#include <stdbool.h> +#endif +#include <stddef.h> +#ifdef _GLIBCXX_HAVE_STDINT_H +#include <stdint.h> +#endif +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _GLIBCXX_HAVE_TGMATH_H +#include <tgmath.h> +#endif +#include <time.h> +#if __has_include(<uchar.h>) +#include <uchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCHAR_H +#include <wchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCTYPE_H +#include <wctype.h> +#endif diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc new file mode 100644 index 00000000000..766c7b68617 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc @@ -0,0 +1,41 @@ +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// { dg-options "-std=gnu++2a" } +// { dg-do compile } + +// Ensure the library only uses the __name__ form for attributes. +// Don't test 'const' and 'noreturn' because they are reserved anyway. +#define abi_tag 1 +#define always_inline 1 +#ifndef __APPLE__ +// darwin headers use this, see PR 64883 +# define visibility 1 +#endif +#define packed 1 +#define pure 1 +// glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM. +#ifndef __arm__ +#define unused 1 +#endif + +#include <bits/extc++.h> + +int +main() +{ +} diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_exceptions.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_exceptions.cc new file mode 100644 index 00000000000..2d2b8242bd9 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_exceptions.cc @@ -0,0 +1,21 @@ +// { dg-do compile } +// { dg-options "-std=gnu++2a -fno-exceptions" } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <bits/extc++.h> diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_rtti.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_rtti.cc new file mode 100644 index 00000000000..be518b036a0 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_no_rtti.cc @@ -0,0 +1,21 @@ +// { dg-do compile } +// { dg-options "-std=gnu++2a -fno-rtti" } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <bits/extc++.h> diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_pedantic_errors.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_pedantic_errors.cc new file mode 100644 index 00000000000..20fe03b1cf8 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_pedantic_errors.cc @@ -0,0 +1,21 @@ +// { dg-do compile } +// { dg-options "-std=gnu++2a -pedantic-errors" } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <bits/extc++.h> diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc new file mode 100644 index 00000000000..b6052d4ae5f --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/operator_names.cc @@ -0,0 +1,30 @@ +// { dg-do compile } +// { dg-options "-std=gnu++2a -fno-operator-names" } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// libstdc++/47662 + +// Avoid using PCH +#include <cerrno> +#include <bits/stdc++.h> +#include <bits/stdtr1c++.h> +#include <bits/extc++.h> + +int or, xor, and; + diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc new file mode 100644 index 00000000000..14e327006b1 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++.cc @@ -0,0 +1,70 @@ +// FreeBSD wants warning clean system headers: +// { dg-options "-std=gnu++2a" } +// { dg-additional-options "-Wall -Wsystem-headers" { target *-*-freebsd* *-*-dragonfly* } } +// { dg-do compile } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 17.4.1.2 Headers + +#include <bits/stdc++.h> + +// "C" compatibility headers +#include <assert.h> +#ifdef _GLIBCXX_HAVE_COMPLEX_H +#include <complex.h> +#endif +#include <ctype.h> +#include <errno.h> +#ifdef _GLIBCXX_HAVE_FENV_H +#include <fenv.h> +#endif +#include <float.h> +#ifdef _GLIBCXX_HAVE_INTTYPES_H +#include <inttypes.h> +#endif +#include <iso646.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <setjmp.h> +#include <signal.h> +#include <stdarg.h> +#ifdef _GLIBCXX_HAVE_STDBOOL_H +#include <stdbool.h> +#endif +#include <stddef.h> +#ifdef _GLIBCXX_HAVE_STDINT_H +#include <stdint.h> +#endif +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _GLIBCXX_HAVE_TGMATH_H +#include <tgmath.h> +#endif +#include <time.h> +#if __has_include(<uchar.h>) +#include <uchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCHAR_H +#include <wchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCTYPE_H +#include <wctype.h> +#endif diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc new file mode 100644 index 00000000000..36105aff5e5 --- /dev/null +++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/stdc++_multiple_inclusion.cc @@ -0,0 +1,117 @@ +// FreeBSD wants warning clean system headers: +// { dg-options "-std=gnu++2a" } +// { dg-additional-options "-Wall -Wsystem-headers" { target *-*-freebsd* *-*-dragonfly* } } +// { dg-do compile } + +// Copyright (C) 2015-2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 17.4.1.2 Headers + +#include <bits/stdc++.h> + +// "C" compatibility headers +#include <assert.h> +#ifdef _GLIBCXX_HAVE_COMPLEX_H +#include <complex.h> +#endif +#include <ctype.h> +#include <errno.h> +#ifdef _GLIBCXX_HAVE_FENV_H +#include <fenv.h> +#endif +#include <float.h> +#ifdef _GLIBCXX_HAVE_INTTYPES_H +#include <inttypes.h> +#endif +#include <iso646.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <setjmp.h> +#include <signal.h> +#include <stdarg.h> +#ifdef _GLIBCXX_HAVE_STDBOOL_H +#include <stdbool.h> +#endif +#include <stddef.h> +#ifdef _GLIBCXX_HAVE_STDINT_H +#include <stdint.h> +#endif +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _GLIBCXX_HAVE_TGMATH_H +#include <tgmath.h> +#endif +#include <time.h> +#if __has_include(<uchar.h>) +#include <uchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCHAR_H +#include <wchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCTYPE_H +#include <wctype.h> +#endif + +#include <bits/stdc++.h> + +// "C" compatibility headers +#include <assert.h> +#ifdef _GLIBCXX_HAVE_COMPLEX_H +#include <complex.h> +#endif +#include <ctype.h> +#include <errno.h> +#ifdef _GLIBCXX_HAVE_FENV_H +#include <fenv.h> +#endif +#include <float.h> +#ifdef _GLIBCXX_HAVE_INTTYPES_H +#include <inttypes.h> +#endif +#include <iso646.h> +#include <limits.h> +#include <locale.h> +#include <math.h> +#include <setjmp.h> +#include <signal.h> +#include <stdarg.h> +#ifdef _GLIBCXX_HAVE_STDBOOL_H +#include <stdbool.h> +#endif +#include <stddef.h> +#ifdef _GLIBCXX_HAVE_STDINT_H +#include <stdint.h> +#endif +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _GLIBCXX_HAVE_TGMATH_H +#include <tgmath.h> +#endif +#include <time.h> +#if __has_include(<uchar.h>) +#include <uchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCHAR_H +#include <wchar.h> +#endif +#ifdef _GLIBCXX_HAVE_WCTYPE_H +#include <wctype.h> +#endif diff --git a/libstdc++-v3/testsuite/18_support/headers/version/macros.cc b/libstdc++-v3/testsuite/18_support/headers/version/macros.cc new file mode 100644 index 00000000000..70a8beb5bb5 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/version/macros.cc @@ -0,0 +1,28 @@ +// Copyright (C) 2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// { dg-do compile } + +#include <version> + +#ifndef _GLIBCXX_RELEASE +# error "_GLIBCXX_RELEASE is not defined by <version>" +#endif + +#ifndef __GLIBCXX__ +# error "__GLIBCXX__ is not defined by <version>" +#endif
commit f432c0d29f9db3b0f40d34f52f32936a2d24fbb8 Author: Jonathan Wakely <jwakely@redhat.com> Date: Fri Jun 15 15:35:38 2018 +0100 P0754R2 <version> header * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/bits/c++config: Change doxygen comment to suggest <version> instead of <iosfwd>. * include/std/version: New header. diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 77e6dc2f6be..f91907df325 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -80,7 +80,8 @@ std_headers = \ ${std_srcdir}/utility \ ${std_srcdir}/valarray \ ${std_srcdir}/variant \ - ${std_srcdir}/vector + ${std_srcdir}/vector \ + ${std_srcdir}/version bits_srcdir = ${glibcxx_srcdir}/include/bits bits_builddir = ./bits diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 838afc59dfb..a9243888e60 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -24,7 +24,7 @@ /** @file bits/c++config.h * This is an internal header file, included by other library headers. - * Do not attempt to use it directly. @headername{iosfwd} + * Do not attempt to use it directly. @headername{version} */ #ifndef _GLIBCXX_CXX_CONFIG_H diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version new file mode 100644 index 00000000000..61d85b7b80f --- /dev/null +++ b/libstdc++-v3/include/std/version @@ -0,0 +1,131 @@ +// -*- C++ -*- Libstdc++ version details header. + +// Copyright (C) 2018 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +/** @file version + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + */ + +#ifndef _GLIBCXX_VERSION_INCLUDED +#define _GLIBCXX_VERSION_INCLUDED + +#pragma GCC system_header + +#include <bits/c++config.h> + +// c++03 +#define __cpp_lib_incomplete_container_elements 201505 + +#if !defined(__STRICT_ANSI__) +// gnu++03 +# define __cpp_lib_uncaught_exceptions 201411 +#endif + +#if __cplusplus >= 201103L +// c++11 +#define __cpp_lib_allocator_is_always_equal 201411 +#define __cpp_lib_allocator_traits_is_always_equal 201411 +#define __cpp_lib_is_null_pointer 201309 +#define __cpp_lib_result_of_sfinae 201210 +#define __cpp_lib_shared_ptr_arrays 201603 + +#if !defined(__STRICT_ANSI__) +// gnu++11 +# define __cpp_lib_enable_shared_from_this 201603 +# define __cpp_lib_is_swappable 201603 +# define __cpp_lib_void_t 201411 +#endif + +#if __cplusplus >= 201402L +// c++14 +#define __cpp_lib_chrono_udls 201304 +#define __cpp_lib_complex_udls 201309 +#define __cpp_lib_exchange_function 201304 +#define __cpp_lib_generic_associative_lookup 201304 +#define __cpp_lib_integer_sequence 201304 +#define __cpp_lib_integral_constant_callable 201304 +#define __cpp_lib_is_final 201402L +#define __cpp_lib_make_reverse_iterator 201402 +#define __cpp_lib_make_unique 201304 +#define __cpp_lib_quoted_string_io 201304 +#define __cpp_lib_robust_nonmodifying_seq_ops 201304 +#define __cpp_lib_shared_timed_mutex 201402 +#define __cpp_lib_string_udls 201304 +#define __cpp_lib_transformation_trait_aliases 201304 +#define __cpp_lib_transparent_operators 201510 +#define __cpp_lib_tuple_element_t 201402L +#define __cpp_lib_tuples_by_type 201304 + +#if __cplusplus >= 201703L +// c++17 +#define __cpp_lib_addressof_constexpr 201603 +#define __cpp_lib_apply 201603 +#define __cpp_lib_array_constexpr 201603 +#define __cpp_lib_as_const 201510 +#define __cpp_lib_atomic_is_always_lock_free 201603 +#define __cpp_lib_bool_constant 201505 +#define __cpp_lib_boyer_moore_searcher 201603 +#define __cpp_lib_byte 201603 +#define __cpp_lib_chrono 201611 +#define __cpp_lib_clamp 201603 +#define __cpp_lib_constexpr_char_traits 201611 +#define __cpp_lib_enable_shared_from_this 201603 +#define __cpp_lib_filesystem 201703 +#define __cpp_lib_gcd 201606 +#define __cpp_lib_gcd_lcm 201606 +#define __cpp_lib_has_unique_object_representations 201606 +#define __cpp_lib_hypot 201603 +#define __cpp_lib_invoke 201411 +#define __cpp_lib_is_aggregate 201703 +#define __cpp_lib_is_invocable 201703 +#define __cpp_lib_is_swappable 201603 +#define __cpp_lib_launder 201606 +#define __cpp_lib_lcm 201606 +#define __cpp_lib_logical_traits 201510 +#define __cpp_lib_make_from_tuple 201606 +#define __cpp_lib_map_insertion 201411 +#define __cpp_lib_map_try_emplace 201411 +#define __cpp_lib_math_special_functions 201603L +#define __cpp_lib_node_extract 201606 +#define __cpp_lib_nonmember_container_access 201411 +#define __cpp_lib_not_fn 201603 +#define __cpp_lib_optional 201603 +#define __cpp_lib_sample 201603 +#define __cpp_lib_scoped_lock 201703 +#define __cpp_lib_shared_mutex 201505 +#define __cpp_lib_shared_ptr_weak_type 201606 +#define __cpp_lib_string_view 201603 +#define __cpp_lib_type_trait_variable_templates 201510L +#define __cpp_lib_unordered_map_insertion 201411 +#define __cpp_lib_unordered_map_try_emplace 201411 +#define __cpp_lib_void_t 201411 + +#if __cplusplus > 201703L +// c++2a +#endif // C++2a +#endif // C++17 +#endif // C++14 +#endif // C++11 + +#endif // _GLIBCXX_VERSION_INCLUDED