Ich verwende Assertion-Makro von assert.h Ich habe definiert Lambda Assertion Überprüfung durchführen.Erhalten zu viele Argumente, um function-like Makroaufruf Kompilierungsfehler beim Definieren von Lambda innerhalb Assert (assert.h) in Xcode [C++]
int val1 = 0;
int val2 = 1;
const auto check = [val1,val2]()-> bool
{
return val1 < val2;
};
// no error for this call
assert(check() && "Test is failed");
// no error for this call
assert([=]()-> bool
{
return val1 < val2;
}() && "Test is failed");
//compile error for this call "too many arguments provided to function-like macro invocation" assert([val1,val2]()-> bool { return val1 < val2; }() && "Test is failed");
warum ich
zu viele Argumente zur Verfügung gestellt bekommen für den Fall funktionieren ähnliche Makroaufruf
Kompilierungsfehler, wenn ich behaupte, bin mit Makro und definieren Lambda mit mehr als einem Argument in der Aufnahmeliste?
Baum mit Augen noch eine Sache nicht klar, das Argument der Behauptung insert.h ist innen() '#define \t assert (e) \ (__builtin_expect (! (E), 0)? __assert_rtn (__ func__, __FILE__, __LINE__, #e): (void) 0) ' –
@TM Diese Parens kommen zu spät, für das Zitat oben sind die Parens und Kommas * vor * der Erweiterung relevant, nicht die im Ergebnis. –