Sto usando macro asserzione da assert.h Ho definito lambda per eseguire il controllo dell'asserzione.Ottenere troppi argomenti forniti per l'errore di compilazione di una funzione simile a una macro durante la definizione di lambda all'interno 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");
perché sto ottenendo
troppi argomenti addotti a funzionare come macro invocazione
errore di compilazione per il caso in cui sto usando asserire macro e definizione di lambda con più di un argomento nella lista di cattura?
Baum mit Augen ancora una cosa non chiara, l'argomento di assert in asert.h è dentro() '#define \t assert (e) \ (__builtin_expect (! (E), 0)? __assert_rtn (__ func__, __FILE__, __LINE__, #e): (void) 0) ' –
@TM Quei paren arrivano troppo tardi, per la citazione di cui sopra, le parentesi e le virgole * prima * l'espansione sono rilevanti, non quelle nel risultato. –