-
Notifications
You must be signed in to change notification settings - Fork 67
-
Notifications
You must be signed in to change notification settings - Fork 67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Build failing on GCC arm due to _N defined as a macro #187
Comments
Yeah this implementation is meant to go into the standard implementation hence we also use underscores, obviously we need to make it compatible with the ones we want to intregrate with. But seriously who injects single letter macros into the global namespace lol, almost as bad as MSVC definine MIN and MAX as macros .... |
On the other side I don't think there is a reason we should put _ in front of tempalte parameters in the first place. |
Right, I don't think it's our job necessarily to pre-mangle symbols. If a standard library implementation wants to adopt our reference mdspan implementation, they will do that mangling on their own. This is a bit relevant to #185, though. We've been wanting to use a prefix |
Correct me if I'm wrong but I don't think the name of template parameters have to be mangled at all because they are no symbols and they don't leave the scope of the template definition. But - as we can see in this particular issue - they are affected by global macros. So consequently I would say they actually may not be mangled at all. |
@LnnrtS wrote:
Just to clarify: The library in this repository does not need to mangle template parameters. Standard Library implementations of mdspan (which are coming) generally mangle symbols to avoid collisions with users' macros. |
Ok I see. I wasn't taking user defined macros into account (I mean, why would anybody.. ;-)) |
We may wanna mangle but just use some larger names for the template parameters. That said I still think its insane to have in any library single letter macros, mangled or not. |
Did just run into this myself (also on arm bare-metal). I too, am aghast to hear of those single letter macros (which I wasn't aware of). Unfortunately, bare-metal development still is very much a C world, and you'd be surprised how much ugliness can be found in manufacturer's toolchains and SDKs. So here too, I'd would be grateful for any other choice of template parameter names, despite the fact that these macros being a crime against any sane programmer. Unfortunately, these macros are actually used somewhere deep inside internal headers of the stdlib, so the best way I found to avoid them leaking into the rest of the code is to include some significant part of the stdlib ( |
This PR I think will actually fix this incidentally: #212 |
I think this is now fixed can you guys try? @burnpanck @LnnrtS |
Fixed, apart from |
…d-test-helpers kokkos: refactor duplicated test helpers
A quick godbolt reproduction demonstrating the remaining breakage in I can put together a PR to fix the remaining issue, but I've got two questions:
|
This check would require 3 times (number-of-template-parameters) lines of preprocessor logic for every class template and function template. There are so many class templates and function templates in this library. An important goal of the reference implementation of mdspan is to be legible. If we find ourselves wanting to work around this issue, I would much prefer just picking different template parameter names.
I would find that acceptable. |
Newlib defines a macro _U in ctypes.h, resulting in a collision with the existing template names for __compressed_pair. Use _T1 and _T2 instead of _T and _U to avoid this collision. Fixes kokkos#187.
ctype.h
on that platform defineswhich breaks
mdspan
in many places since some of those names are used as template parameters.Names starting with an underscore and upper case letter are reserved by the standard to be used by an implementation so I think the proper way to handle this is rename the template parameters. I didn't find a quick way to automate the renaming otherwise I would have made a pull request.
The text was updated successfully, but these errors were encountered: