C++標準、特にC++ 17草案(N4659)の§30.7.5.2.4に、出力ストリームの書式設定された出力操作で文字が拡大されるときの矛盾があると思われます(operator<<()
)。正確に同じ不一致がen.cppreference.comに反映されているようです。C++出力ストリーム演算子<<()で文字が拡大されるのはいつですか?
まず、次の宣言を前提としています
std::ostream out;
std::wostream wout;
char ch;
wchar_t wch;
const char* str;
const wchar_t* wstr;
その後
out << ch
がが文字拡大、out << str
行う文字拡大、wout << ch
を行っていないことが述べられていますキャラクタワイドを実行する寧、wout << str
文字拡大、wout << wch
がが文字拡大を行っていないを行い、wout << wstr
は、文字拡大を行います。
最初の、そして最も明白な矛盾がwchar_t
引数、char
引数を取るだけを取って何widen()
機能がないので(6)は、真実ではないということです。
第2の(不一致の)不一致は、(1)と(2)の間にあります。 out << "x"
は'x'
を広げて、out << 'x'
はすべきではないと私には奇妙に思えます。
標準のテキストを誤解していますか、そこに何か問題がありますか?後者が真実ならば、意図した振る舞いが何であるか知っていますか?
EDIT:明らかに、この矛盾(私が正しい場合)は、少なくともC++ 03(§27.6.2.5.4)以来、この標準に存在しています。テキストは中間的な基準を少し変えますが、私が上で説明したように不整合が残っています。
これはLWGの問題です。 –
"... cがchar型で、ストリームの文字型がcharでない場合、seqは out.widen(c)で構成され、それ以外の場合seqはc ... ..."一般的に、どうしてそうではないか)はあまり良くありません。不一致が見つかった文章の1つを指定できますか? – Loreto
@Loreto矛盾は実際には標準の一文の中にはありません。上記(1)と(2)が矛盾していることをDietmarは確信しており、(1)正しいこと、(2)間違っている(悪い言い方から間違っている) –