如何抑制由 Boost.Log 和 GCC 4.4 引起的"warning: missing initializer"?
How to suppress "warning: missing initializer" caused by Boost.Log and GCC 4.4?
谁能告诉我如何抑制由Boost.Log和GCC 4.4.7生成的以下警告消息?我的项目是在 C++11 模式下构建的(在 GCC 4.4.7 中-std=c++0x
)。
src/Logger.cc:7: warning: missing initializer for member ‘boost::log::v2_mt_posix::expressions::attribute_keyword<tag::severity, boost::phoenix::actor>::proto_expr_’
其中src/Logger.cc
是我的日志记录类的源文件,它是 Boost.Log 的包装器。第 7 行使用 Boost.Log 宏之一,如下所示。 Logger::ESeverityLevel
是 Logger.h
中定义的枚举。
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", Logger::ESeverityLevel)
可以按如下方式展开此宏。
namespace tag {
struct severity :
public ::boost::log::expressions::keyword_descriptor
{
typedef Logger::ESeverityLevel value_type;
static ::boost::log::attribute_name get_name() { return ::boost::log::attribute_name("Severity"); }
};
}
typedef ::boost::log::expressions::attribute_keyword< tag::severity > severity_type; const severity_type severity = {};
看起来severity_type
的初始化会发出此警告,而它对 Clang 有效(Apple LLVM 版本 6.0)。
此宏的官方示例代码可在以下位置找到http://theboostcpplibraries.com/boost.log#ex.log_05
一种方法是使用GCC的内置#pragma
禁用GCC中的警告,例如
#pragma GCC diagnostic push // Save the current warning state
#pragma GCC diagnostic ignored "-Wmissing-field-initializers" // Disable the warning you're getting
...
// offending code
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", Logger::ESeverityLevel)
...
#pragma GCC diagnostic pop // Restore previous default behaviour
您也可以使用 -Wno-missing-field-initializers
在命令行中禁用此行为。
相关文章:
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 在 Cocos2dx 中初始化粒子效果后的警告 - "libpng warning: iCCP: known incorrect sRGB profile"
- Visual Studio C6385 warning c++
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- C2664 无法从'initializer list'转换参数
- C++ 错误:"array must be initialized with a brace-enclosed initializer"
- "Warning : No return statement in function returning non-void"是什么意思?
- cuda-gdb 给出错误"warning: Cuda API error detected: cudaLaunchKernel returned (0x7)"
- 2D 数组中的"Excess elements in scalar initializer"错误
- 编译代码时"[Warning] extra tokens at end of"
- QT_HAS_BUILTIN warning
- warning C4503 with CGAL 4.12-beta 2
- 使用 std::min "no matching function for call to ‘min(<brace-enclosed initializer list>)’"时出错
- 如何修复'PCH Warning: header stop not at file scope'
- 在C++中标记化"Braced Initializer List"样式字符串(使用 Boost?
- std::move in initializer lists
- "Default member initializer needed within definition of enclosing class outside of member functions
- 外部抛出"both extern and initializer"错误
- 从成员构造函数(Brace Initializer vs Initializer列表)抛出异常
- 如何抑制由 Boost.Log 和 GCC 4.4 引起的"warning: missing initializer"?