On Thu, Nov 14, 2019 at 10:15:21PM +0000, Jonathan Wakely wrote:
> > namespace std {
> > struct source_location {
> > struct __impl {
>
> Will this work if the library type is actually in an inline namespace,
> such as std::__8::source_location::__impl (as for
> --enable-symvers=gnu-versioned-namespace) or
> std::__v1::source_location::__impl (as it probably would be in
> libc++).
>
> If I'm reading the patch correctly, it would work fine, because
> qualified lookup for std::source_location would find that name even if
> it's really in some inline namespace.
I'd say so, but the unfinished testsuite coverage would need to cover it of
course.
> > const char *__file;
> > const char *__function;
> > unsigned int __line, __column;
> > };
> > const void *__ptr;
>
> If the magic type the compiler generates is declared in the header,
> then this member might as well be 'const __impl*'.
Yes, with the static_cast on the __builtin_source_location ()
result sure. I can't easily make it return const std::source_location::__impl*
though, because the initialization of the builtins happens early, before
<source_location> is parsed.
And as it is a nested class, I think I can't predeclare it in the compiler.
If it would be std::__source_location_impl instead of
std::source_location::__impl, perhaps I could pretend there is
namespace std { struct __source_location_impl; }
but I bet that wouldn't work well with the inline namespaces.
So, is const void * return from the builtin ok?
Jakub