Skip to content

libc++ headers vs GCC 15 type traits builtins #137704

@frobtech

Description

@frobtech

Between GCC 14 and GCC 15, a bunch of new C++ traits builtins were added that Clang already has:

1b7cfa715c6 c++: introduce __builtin_is_virtual_base_of                         
3dab8f8a542 c++: Implement __is_nothrow_invocable built-in trait                
7bd33955970 c++: Implement __is_invocable built-in trait                        
37fad797ade c++: Implement __array_rank built-in trait                          
142d1d8e057 c++: Implement __decay built-in trait                               
85c2ba42441 c++: Implement __add_rvalue_reference built-in trait                
c08d1afbf53 c++: Implement __add_lvalue_reference built-in trait                
86812be98a1 c++: Implement __remove_all_extents built-in trait                  
e1ca1fa1c7a c++: Implement __remove_extent built-in trait                       
2763f81e0b9 c++: Implement __add_pointer built-in trait                         
06d64eb96cd c++: Implement __is_unbounded_array built-in trait                  
cb5d904c775 c++: Implement __is_pointer built-in trait                          
9b51b3e79e4 c++: Implement __is_volatile built-in trait                         
7dd8c905219 c++: Implement __is_const built-in trait                            

Unlike Clang, GCC gets upset if these are used via template aliases rather than only via the standard ...::type type aliases.
PR #81386 addressed the same issue earlier for __remove_cv and __remove_cvref.
Equivalent changes are needed for all the other ones where __has_builtin(...) has become true in GCC 15.

Metadata

Metadata

Assignees

No one assigned

    Labels

    libc++libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions