Syntax Error with Q_ASSERT
-
@Wieland I don't think it works. It just compiles ;)
Well you could use something simpler:define MY_ASSERT(...) (!(__VA_ARGS__) ? qt_assert(#__VA_ARGS__,__FILE__,__LINE__) : qt_noop())
and that should be ok, but it has the same drawback I described earlier - it changes the expression it tests by adding extra () around it. Admittedly it's not a big deal and it should work as expected most of the time.
@Chris-Kawa Yes it works; funny that it doesn't work for you. Who knows why..
-
@Wieland Maybe I messed up something. http://ideone.com/XKJUnV
-
@Wieland Maybe I messed up something. http://ideone.com/XKJUnV
@Chris-Kawa Ha! Just found out that
#define FIRST(A, ...) A
doesn't work as expected (with MSVC): It doesn't give us the first argument only, instead it just gives all arguments (like__VA_ARGS__
). Maybe I'm wrong here again, but that looks like a bug in MSVC to me and it also explains why the code works.Edit: Maybe it's really a bug in VC's preprocessor, at least someone on SO says so. And the workaround he presents actually seems to fix it, so now my code doesn't compile with MSVC anymore.
-
Thanks everyone for watching me stumbling around like a clown :)
-
Thanks everyone for watching me stumbling around like a clown :)
@Wieland
Well to be fair, fooling around with Variadic Macros takes more balls than entertaining
clueless children - so it was educational to see that even in 2016, you cannot trust the preprocessor
to work the same across compilers. :)