Uphill

Dan Olson via Digitalmars-d digitalmars-d at puremagic.com
Wed Jun 3 00:06:13 PDT 2015


"Ola Fosheim "Grøstad\"" <ola.fosheim.grostad+dlang at gmail.com> writes:

> On Monday, 1 June 2015 at 16:09:34 UTC, Dan Olson wrote:
>> Timely!  I and stack overflow struggled for a couple hours to find
>> an
>> equivalent C++ template for something that was straightforward with
>> a
>> couple macros.
>
> …but without an example it is hard to figure out what macros are
> needed for.

Stringify - here I want to rapidly prototype code with syscalls that
need return values checked, and get nice output when they fails. My C++
template skills are weak and was unable to come up with an equivalent
replacement.  Is this a way?

#define STRINGIFY(x) #x
#define STR(x) STRINGIFY(x)
#define SYSCHK(syscall) \
    ({__typeof__(syscall) r = (syscall); \
    if (r == -1) die(__FILE__ ":" STR(__LINE__) ":" #syscall " failed"); \
    r;})


    int fd = SYSCHK(open(fname, O_EVTONLY));
    int kfd = SYSCHK(kqueue());
    struct kevent changes;
...
    struct kevent kevs[5];
    int n = SYSCHK(kevent(kfd, &changes, 1, kevs, 5, 0));


More information about the Digitalmars-d mailing list