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]

Fix std::byte namespace declaration


Current build of libstdc++ with --enable-symvers=gnu-versioned-namespace fails (at least under Linux) because of:

In file included from /home/fdt/dev/gcc/build_versioned_ns/x86_64-pc-linux-gnu/libstdc++-v3/include/memory_resource:39,                  from ../../../../../git/libstdc++-v3/src/c++17/memory_resource.cc:25: /home/fdt/dev/gcc/build_versioned_ns/x86_64-pc-linux-gnu/libstdc++-v3/include/cstddef:71:59: error: la référence à « byte » est ambiguë
   71 |   template<> struct __byte_operand<bool> { using __type = byte; };
      | ^~~~
In file included from /home/fdt/dev/gcc/build_versioned_ns/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_algobase.h:61,                  from /home/fdt/dev/gcc/build_versioned_ns/x86_64-pc-linux-gnu/libstdc++-v3/include/memory:62,                  from /home/fdt/dev/gcc/build_versioned_ns/x86_64-pc-linux-gnu/libstdc++-v3/include/memory_resource:37,                  from ../../../../../git/libstdc++-v3/src/c++17/memory_resource.cc:25: /home/fdt/dev/gcc/build_versioned_ns/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/cpp_type_traits.h:395:30: note: les candidats sont : « enum class std::__8::byte »
  395 |   enum class byte : unsigned char;
      |                              ^~~~
In file included from /home/fdt/dev/gcc/build_versioned_ns/x86_64-pc-linux-gnu/libstdc++-v3/include/memory_resource:39,                  from ../../../../../git/libstdc++-v3/src/c++17/memory_resource.cc:25: /home/fdt/dev/gcc/build_versioned_ns/x86_64-pc-linux-gnu/libstdc++-v3/include/cstddef:68:14: note:                      « enum class std::byte »
   68 |   enum class byte : unsigned char {};
      |              ^~~~

I think the issue if that std::byte declaration in cpp_type_traits.h has been done in versioned namespace, so the attached patch.

    * include/bits/cpp_type_traits.h (std::byte): Move outside versioned
    namespace.

Tested under Linux x86_64.

Ok to commit ?

François

diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h
index 960d469f412..fa7fc7564c2 100644
--- a/libstdc++-v3/include/bits/cpp_type_traits.h
+++ b/libstdc++-v3/include/bits/cpp_type_traits.h
@@ -68,6 +68,10 @@ extern "C++" {
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
+#if __cplusplus >= 201703L
+  enum class byte : unsigned char;
+#endif
+
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   struct __true_type { };
@@ -392,8 +396,6 @@ __INT_N(__GLIBCXX_TYPE_INT_N_3)
     };
 
 #if __cplusplus >= 201703L
-  enum class byte : unsigned char;
-
   template<>
     struct __is_byte<byte>
     {


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