This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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"



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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]