私は、もともと GNAT 3.13a1 を使用してコンパイルされたレガシー Ada 95 プロジェクト (他の会社から継承されたもの) に取り組んでいます。コンパイラを GNAT 4.7.4 に更新して、さらなる開発で使用したい GNAT ライブラリにアクセスできるようにしましたが、-gnat95 フラグを使用しています。
特定のファイルをコンパイルするのに問題があります。「Ada.Calendar.GMT」という名前だったという点で、少し変わっています。これは、Ada パッケージ ツリー内のパッケージの子パッケージであるパッケージを定義できないという新しいコンパイラの問題でした。これはそれほど大きな問題ではないと判断したので、パッケージの名前を「GMT_Library」に変更し、Ada.Calendar をインポートしてそのタイプにアクセスし、ファイルの名前を適切に変更しました (さらなるコンパイラ警告)。
しかし今、コンパイラは、Ada.Calendar.Time を Duration にキャストすることは無効であると不平を言っています。具体的には、次のエラーが表示されます。
180. D := Duration (Date);
|
>>> illegal operand for numeric conversion
パッケージの名前を変更し、Ada.Calendar をインポートする以外に、このソース ファイルまたは対応する仕様ファイルを変更していません。なぜこれが GNAT 3.13a1 で許可された操作なのですか? なぜ機能しなくなったのですか?解決策はありますか?
編集:
D は Duration で、Date は Ada.Calendar.Time です。
さらに調査した結果、元の開発者は主にここで定義された Ada.Calendar の実装をコピーしたようです。そのファイルは、Split プロシージャで同じキャストを実行します。では、標準ライブラリがそれを実行しても問題ないのはなぜですか?