Fix std::byte namespace declaration

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Fix std::byte namespace declaration

François Dumont-2
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


byte.patch (664 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Fix std::byte namespace declaration

Jonathan Wakely-3
On 23/10/18 07:07 +0200, François Dumont wrote:

>On 10/18/2018 10:34 PM, Jonathan Wakely wrote:
>>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.
>I thought cstddef was some kind of generated file.
>
>I eventually put all its content in versioned namespace.
>
>    * include/c_global/cstddef: Add versioned namespace.
>
>Build successful with the patch, still tests to run. Ok if successful ?

Yes, OK thanks.