C++ ISO仕様、§ 26.2/2によれば:なぜC++はその複合体をfloat、double、またはlong doubleに対してのみインスタンス化することを義務付けていますか?
、
float
以外の任意のタイプのためのテンプレートをインスタンス化complex
double
またはlong double
の効果が指定されていません。
なぜ標準の作成者がこの制限を明示的に追加するのですか?たとえば、complex<int>
またはcomplex<MyCustomFixedPointType>
を人工的な制限のように見なすと、何が起こるかは不明です。
この制限はありますか?独自のカスタムタイプでcomplex
をインスタンス化する場合の回避策はありますか?
は、私は主にOPがabs
がcomplex<int>
のための奇妙な出力を与えていた理由として混乱したためthis earlier questionのこの質問を、求めています。これは、固定小数点型、より高精度の実数などから数字をcomplex
にすることを考えれば、まだまだ意味がないと言えます。
以前の回答を見てから笑ってしまいましたが、本当に良い質問です。 – chris
@ chris-私は、それに対して高いレベルの理由を与えることができなければ、その答えを与えるのが悪いと感じました。私は通常、「これはX、Y、Zの理由でC++の奇妙なケースです」と言っているのが良いですが、今回は何が起きているのか分かりません。 – templatetypedef
"標準化複合体は、委員会で議論され、10年以上にわたって議論されており、少なくとも1つのベンダーからそれを支持するという大きな抵抗が存在する」 http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-March/020398。html –