tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: EV_SET() better C++ compat with alternative implementations



On 11.08.2019 02:56, Valery Ushakov wrote:
> Kamil Rytarowski <n54%gmx.com@localhost> wrote:
> 
>> Cast of udata from void* to intptr_t shall be done with
>> reinterpret_cast<> otherwise a C++ compiler errors.
>>
>> Defining __REINTERPRET_CAST [1] and using it, did not work as a compiler
>> protested for NULL argument "warning: passing NULL to non-pointer argument".
>>
>> Using double cast __REINTERPRET_CAST(intptr_t, __CAST(void *, (udata)))
>> pacified the warning/error about passing NULL in C++, but it created the
>> problem of calling EV_SET using the native argument type intptr_t.
> 
> You are reporting quite an abstract summary that is not so easy to
> follow for someone who hasn't done all the same experiments that you
> already have done.


$ cat /tmp/test.cpp


#include <sys/types.h>
#include <sys/event.h>

int
main(int argc, char **argv)
{
        struct kevent kv;

        EV_SET(&kv, 0, 0, 0, 0, 0, 0);
        EV_SET(&kv, 0, 0, 0, 0, 0, NULL);
        EV_SET(&kv, 0, 0, 0, 0, 0, nullptr);
        EV_SET(&kv, 0, 0, 0, 0, 0, 0L);
        EV_SET(&kv, 0, 0, 0, 0, 0, 0LL);
        EV_SET(&kv, 0, 0, 0, 0, 0, 0U);
        EV_SET(&kv, 0, 0, 0, 0, 0, 0UL);
        EV_SET(&kv, 0, 0, 0, 0, 0, 0ULL);
        EV_SET(&kv, 0, 0, 0, 0, 0, (intptr_t)0);
        EV_SET(&kv, 0, 0, 0, 0, 0, (uintptr_t)0);


        return 0;
}

Attachment: signature.asc
Description: OpenPGP digital signature



Home | Main Index | Thread Index | Old Index