Fix std::byte namespace declaration
Jonathan Wakely
jwakely@redhat.com
Thu Oct 18 20:34:00 GMT 2018
On 18/10/18 22:12 +0200, François Dumont wrote:
>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.
I think the definitions in <cstddef> should use the versioned
namespace macros. Then <bits/cpp_type_traits.h> would be correct.
>Â Â Â * 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>
> {
>
More information about the Libstdc++
mailing list