On Wed, Aug 14, 2019 at 06:06:18 +0300, Valery Ushakov wrote: > static inline void > EV_SET_(struct kevent *_kevp, uintptr_t _ident, uint32_t _filter, > uint32_t _flags, uint32_t _fflags, int64_t _data, > uintptr_t _udata) > { > _kevp->ident = _ident; > _kevp->filter = _filter; > _kevp->flags = _flags; > _kevp->fflags = _fflags; > _kevp->data = _data; > _kevp->udata = _udata; > }
Oops, s/uintptr_t/intptr_t/ And this is actually already defined for C, so we need to just provide the templates. template <typename _U> static inline void __always_inline EV_SET(struct kevent *_kevp, uintptr_t _ident, uint32_t _filter, uint32_t _flags, uint32_t _fflags, int64_t _data, _U _udata) { EV_SET_(_kevp, _ident, _filter, _flags, _fflags, _data, static_cast<intptr_t>(_udata)); } /* specialize for std::nullptr_t */ template <> inline void __always_inline EV_SET(struct kevent *_kevp, uintptr_t _ident, uint32_t _filter, uint32_t _flags, uint32_t _fflags, int64_t _data, decltype(nullptr) _udata __unused) { EV_SET_(_kevp, _ident, _filter, _flags, _fflags, _data, 0); } -uwe