On 11.08.2019 19:19, Kamil Rytarowski wrote:
> On 11.08.2019 19:17, Christos Zoulas wrote:
>> Did you use -Wold-style-cast? We've come full circle now, and what we have seems
>> to be more complicated than what we had before and I am not sure what was the
>> problem in the first place... Can we just step back and understand what is the problem
>> we are trying to solve with all this complexity?
>>
The original problem is udata of intptr_t insted of void* (like in
FreeBSD) and with C++ compilers it's not possible to cast it cleanly to
intptr_t without alternative approaches.
This keeps breaking C++ users and we need to patch 3rd party code from
the caller level.
It used to break C ones too, but we have introduced a cast to workaround it.
As we fix it for C ones, I think we should fix it for C++ ones as well.
3 solutions:
- Keep patching it on caller level for C++
- Keep inventing workarounds on callee level for C++
- Change the type of udata to void* in our source code.
Templates and c++ features are difficult as the language is reinventing
its each decade.
Can we go for changing the udata type to void*? This will make all
compatibility problems to go away.
On 11.08.2019 19:28, Christos Zoulas wrote:> I don't see how this is
possible.
>
> [1:27pm] 345>cat t.cpp
> #include <cstdio>
> #include <cstdint>
>
> int
> main(int argc, char *argv[])
> {
> printf("%jd", (intptr_t)argv[0]);
> return 0;
> }
> [1:28pm] 346>g++ -std=gnu++11 -Wall -Wold-style-cast t.cpp
> t.cpp: In function 'int main(int, char**)':
> t.cpp:7:32: warning: use of old-style cast [-Wold-style-cast]
> printf("%jd", (intptr_t)argv[0]);
> ^
>
Compilers probably apply different warning rules for system headers.
Attachment:
signature.asc
Description: OpenPGP digital signature