libstdc++: Fix cast in source_location::current() [PR104602]
This fixes a problem for Clang, which is going to return a non-void pointer from __builtin_source_location(). The current definition of std::source_location::current() converts that to void* and then has to cast it back again in the body (which makes it invalid in a constant expression). By using the actual type of the returned pointer, we avoid the problematic cast for Clang. libstdc++-v3/ChangeLog: PR libstdc++/104602 * include/std/source_location (source_location::current): Use deduced type of __builtin_source_location().
This commit is contained in:
parent
ae3c4e521d
commit
41cbcf53dc
1 changed files with 2 additions and 1 deletions
|
@ -43,12 +43,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
{
|
||||
private:
|
||||
using uint_least32_t = __UINT_LEAST32_TYPE__;
|
||||
using __builtin_ret_type = decltype(__builtin_source_location());
|
||||
|
||||
public:
|
||||
|
||||
// [support.srcloc.cons], creation
|
||||
static consteval source_location
|
||||
current(const void* __p = __builtin_source_location()) noexcept
|
||||
current(__builtin_ret_type __p = __builtin_source_location()) noexcept
|
||||
{
|
||||
source_location __ret;
|
||||
__ret._M_impl = static_cast <const __impl*>(__p);
|
||||
|
|
Loading…
Add table
Reference in a new issue