utilizzando g ++ e la compilazione con -Waggregate-return
cercando di silenziare -Waggregate-return solo in una macro per g ++ - compilatore buggy?
#define DOCTEST_CHECK(expr) \
do { \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Waggregate-return\"");\
if(Result failed = (ExpressionDecomposer() << expr)) \
printf("%s\n", failed.m_decomposition.c_str()); \
_Pragma("GCC diagnostic pop"); \
} while(false)
DOCTEST_CHECK(true == false); // produces warnings
ma la srotolato dalla versione a mano non produce eventuali avvisi:
do {
_Pragma("GCC diagnostic push");
_Pragma("GCC diagnostic ignored \"-Waggregate-return\"");
if(Result failed = (ExpressionDecomposer() << true == false))
printf("%s\n", failed.m_decomposition.c_str());
_Pragma("GCC diagnostic pop");
} while(false);
Non dovrebbe essere il comportamento stesso?
Non penso che i tipi Result
e ExpressionDecomposer
contino - solo le classi.
Sto cercando di ottenere la decomposizione delle espressioni che funziona come here (le cose sono state ridenominate un po ').
EDIT: >>here < < è una dimostrazione dal vivo del problema utilizzando la libreria per timore
La mia domanda è: perché? come posso essere privo di avvisi nel primo caso usando la macro? Non posso permettermi di mettere a tacere l'avvertimento a livello globale.
So che questo non risponde alla domanda, ma '-Waggregate-return' sembra piuttosto pedante e dovrebbe essere ignorato, specialmente in C++ dove il ritorno di valore è perfettamente normale. Puoi dare un'occhiata a [questa domanda] (http://stackoverflow.com/questions/14016993/confusion-in-regards-to-purpose-behavior-of-waggregate-return). –
Ricordo vagamente che GCC ha problemi con la pragma nelle macro; potresti voler cercare il loro bugzilla. –
@AlexandreC. Non userei mai questo avvertimento per il codice personale, ma la biblioteca che sto scrivendo dovrebbe essere completamente priva di avvertimenti anche sui livelli più aggressivi (soffro di perfezionismo) ... Anche questo avvertimento non è in '' '-Wall' '' or '' '-Wextra''' per una buona ragione ... – onqtam