使用g ++并使用-Waggregate-return
#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
但是手动展开的版本不会产生任何警告:
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);
行为应该不一样吗?
我认为Result
和ExpressionDecomposer
类型不重要 - 只是类。
我正在尝试让表达式分解像here一样工作(事情已被重命名)。
编辑:&gt;&gt; here&lt;&lt;是使用lest库
的问题的现场演示我的问题是:为什么?如何使用宏在第一种情况下自由警告?我不能在全球范围内消除警告。
答案 0 :(得分:1)
这些错误看起来很相关:
因此,它可能与行号比较或解析器中的某些类似问题有关,并且可能会在以后的某个版本中修复。
答案 1 :(得分:-2)
你可以尝试:
#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)