VS 2010の `<cmath>`ヘッダーからのテンプレートがありません

I just noticed that the templates dictated by the c++11 Standard [26.8 c.math] for the header are missing from the version of the C++ standard library shipped with visual studio 2010.

特に私はstd :: signbitを探していましたが、 msdnでの検索出荷されたヘッダーに表示されていたものを確認しました(つまり、 "古い" C名だけをインポートするディレクティブを使用しています)。 私は標準からのこの逸脱について読んだことは思い出さなかったし、msdnのドキュメントで明示的に指摘されていない。

欠落している機能を取得するには、最善の回避策は何ですか?

Visual Studioの将来のリリースでこれを修正することに関する正式なお知らせはありますか?

EDIT The version of the Standard which I was referring to is outdated, so my claim of incompleteness is ill-aimed. signbit is still missing, but it's not a template, it's an overloaded function. Thanks to @Xeo for the clarification.

1

1 答え

First, these aren't templates (would be strange, as there are no templates in C and is a C header).

その後、VS2010はC ++ 11が完成する前に 出荷されていたので、stdlibのすべてがそこに含まれているわけではありません。

FWIW、VS11はC ++ 11 stdlib全体をカバーすると主張しています。

2
追加された
これらの余分なオーバーロードは、テンプレートであってもなくてもよい。
追加された 著者 Howard Hinnant,
@Francesco:私はどの標準紙を持っているのかわかりませんが、FDISではがCのstdlibから直接取り出されています。これは3つのオーバーロード(26.8/10)を定義しています。また、名前空間は のポイントです。 :)
追加された 著者 Xeo,
@Francesco:それは非常に非常に古い論文です。公開されている最新のC ++ 11のドラフトは、N3242です。最新のポストC ++ 11ドラフトはですN3337 (これは基本的には小規模の編集上の修正を伴うC ++ 11標準です)。
追加された 著者 Xeo,
VS11についての良いニュース。しかし、標準ではテンプレートと呼ばれていることに注意してください.cmathは名前空間について知っています(C言語のようなものではありません)。 signbitの署名は名前空間std {template bool signbit(T x);}である。 }。
追加された 著者 Francesco,
ポイント11は、「cmathで定義されたテンプレートは、Cマクロを同じ名前に置き換えます。テンプレートには、以下の宣言があります:...」と書かれています。ポイント12は、「テンプレートは対応する名前のCマクロと同じように動作する」と述べています。 mingwソースまたはg ++ソースを見ると、それらが機能テンプレートであることが確認されます(通常のタイプの場合はオーバーロードされます)。例: gccを参照してください。 gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/include/c_global/‌&hellip;
追加された 著者 Francesco,
Xeoの説明をありがとう。私は訂正されます(まだ彼らはテンプレートバージョンを取り除いた理由はわかりません)。
追加された 著者 Francesco,