#include <stdio.h>

#define logmsg1   void(*)
#define logmsg2   while(0)
#define logmsg3

inline void logmsg4(...) { }

#define logmsg5   (void(*))
#define logmsg6   (void(*)(...))
#define logmsg7   (void*)

#define logmsg8   (void)
#define logmsg9   (void(*)())

struct tstobj
{
    tstobj(int n) { printf("tst%d created\n", n); }
    ~tstobj() { printf("tst destroyed\n"); }
    int ival() { return 123; }
};
int main(int,char**)
{
#ifndef _MSC_VER
    logmsg1("test", tstobj(1).ival());
#endif
    logmsg2("test", tstobj(2).ival());
    logmsg3("test", tstobj(3).ival());
    logmsg4("test", tstobj(4).ival());  // no comma warning
    logmsg5("test", tstobj(5).ival());
    logmsg6("test", tstobj(6).ival());
    logmsg7("test", tstobj(7).ival());
    logmsg8("test", tstobj(8).ival());
    logmsg9("test", tstobj(9).ival());
    return 0;
}
