以下代码使用g ++ 7编译器和Apple clang ++给出了不同的结果。在使用std::boolalpha
时,我是否遇到了bool输出对齐中的clang错误,或者我犯了错误?
#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>
template<typename T>
void print_item(std::string name, T& item) {
std::ostringstream ss;
ss << std::left << std::setw(30) << name << "= "
<< std::right << std::setw(11) << std::setprecision(5)
<< std::boolalpha << item << " (blabla)" << std::endl;
std::cout << ss.str();
}
int main() {
int i = 34;
std::string s = "Hello!";
double d = 2.;
bool b = true;
print_item("i", i);
print_item("s", s);
print_item("d", d);
print_item("b", b);
return 0;
}
区别在于:
// output from g++ version 7.2
i = 34 (blabla)
s = Hello! (blabla)
d = 2 (blabla)
b = true (blabla)
// output from Apple clang++ 8.0.0
i = 34 (blabla)
s = Hello! (blabla)
d = 2 (blabla)
b = true (blabla)
答案 0 :(得分:5)
在T.C.提到,这是LWG 2703:
设置
(str.flags() & ios_base::boolalpha) != 0
时没有填充填充N4582子条款25.4.2.2.2 [facet.num.put.virtuals]第6段制作 在其行为规范中没有规定填充填充 何时
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/ContextualActionModeTestOneActivity_add" android:icon="@android:drawable/ic_input_add" android:title="Add" android:titleCondensed="Add" app:showAsAction="ifRoom|withText" /> <item android:id="@+id/ContextualActionModeTestOneActivity_search" android:icon="@android:drawable/ic_menu_search" android:title="Search" android:titleCondensed="Search" app:showAsAction="ifRoom|withText" /> <item android:id="@+id/ContextualActionModeTestOneActivity_sort" android:icon="@android:drawable/ic_menu_sort_by_size" android:title="Sort" android:titleCondensed="Sort" app:showAsAction="ifRoom|withText" /> <item android:id="@+id/ContextualActionModeTestOneActivity_help" android:icon="@android:drawable/ic_menu_help" android:title="Help" android:titleCondensed="Help" app:showAsAction="ifRoom|withText" />
。
因此,我没有看到与Clang的解决方案。但请注意:
PS:LWG代表图书馆工作组。