diff mbox series

RFC: What should go in our <version> header?

Message ID 20180615155239.GT6295@redhat.com
State New
Headers show
Series RFC: What should go in our <version> header? | expand

Commit Message

Jonathan Wakely June 15, 2018, 3:52 p.m. UTC
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.



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"

Comments

Ed Smith-Rowland June 17, 2018, 4:49 p.m. UTC | #1
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
Jonathan Wakely June 18, 2018, 11:22 a.m. UTC | #2
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.
Ville Voutilainen June 18, 2018, 12:12 p.m. UTC | #3
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.
Jonathan Wakely June 18, 2018, 4:42 p.m. UTC | #4
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
diff mbox series

Patch

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