【发布时间】:2013-03-24 17:35:51
【问题描述】:
在 C++03 模式下编译时,较新版本的 Clang 支持某些 C++11 扩展,但在打开 -Wc++11-extensions 时可能会发出警告。比如编译这段代码:
std::map<int, int> foo;
for(auto &i : foo) {
}
clang test.cpp -std=c++03 会导致以下警告:
test.cpp:5:6: warning: 'auto' type specifier is a C++11 extension
[-Wc++11-extensions]
for(auto &i : foo) {
^
test.cpp:5:14: warning: range-based for loop is a C++11 extension
[-Wc++11-extensions]
for(auto &i : foo) {
但是编译成功并且生成了正确的代码。但是,尝试使用例如统一初始化 (std::map<int, int> foo{{1,2},{3,4}};) 失败并出现语法错误。
就我而言,我有一个现有的不可变库,由于某些兼容性问题,它只能在 C++03 模式下编译;开发人员表示他们将在“不久的将来”支持 C++11。我现在想使用 C++11 功能针对这个库编写代码,这样当他们使他们的库与 C++11 兼容时,我就不必再次返回并“现代化”代码。 Clang 的 C++11 扩展似乎非常适合此目的,但我不确定我可以使用什么。 Clang 的 C++11 扩展是否记录在某处?
【问题讨论】: