AcademySoftwareFoundation / AcademySoftwareFoundation/OpenColorIO

Build failure on GCC/MinGW (MXE): std::ifstream constructor mismatch with Platform::filenameToUTF()

オープン 初心者向け
#2,283 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
C++
スター
2.1k
フォーク
505
PR マージ指標
30日以内にマージされた PR はありません

説明

Description

OpenColorIO 2.5.1 fails to compile under GCC / MinGW-w64 (including MXE cross builds) due to inconsistent file path type handling in `Platform::filenameToUTF()` when used with `std::ifstream` in `FileTransform.cpp`.

The failure occurs when constructing a `std::ifstream` from the result of `Platform::filenameToUTF(filepath)`, where the returned type may vary between `std::string` and `std::wstring` depending on build configuration (`_WIN32 && UNICODE`).

This leads to template overload resolution failures under GCC/libstdc++ when a `std::wstring` is involved in `std::ifstream` construction.

Error observed (GCC / libstdc++)
```bash
error: no matching function for call to
std::basic_ifstream::basic_ifstream(const std::wstring, std::ios_base::openmode)
```
Affected code `src/OpenColorIO/transforms/FileTransform.cpp`:
```cpp
std::ifstream(Platform::filenameToUTF(filepath), mode)
```

Root cause

- `Platform::filenameToUTF()` is conditionally typed:
- `std::wstring` on _WIN32 && UNICODE
- `std::string` otherwise
- `std::ifstream` construction from `std::wstring` is not consistently supported across standard library implementations
- GCC/libstdc++ rejects this usage, while MSVC may accept it depending on STL implementation details
- This creates a portability issue in file I/O path handling

Impact

- Breaks MXE / MinGW-w64 cross compilation
- Causes divergence between MSVC and GCC builds
- Introduces non-portable file path handling in core I/O utilities

Suggested fix

Avoid passing platform-dependent string types directly into `std::ifstream` construction.

This is the C++17-compatible solution that worked:
```cpp
auto path = Platform::filenameToUTF(filepath);
return std::make_unique(path.c_str(), mode);
```

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

src/OpenColorIO/transforms/FileTransform.cpp から始め、Platform::filenameToUTF(filepath) を使用した std::ifstream の構築を調査します。GCC/MinGW-w64 または MXE で OpenColorIO をビルドして std::wstring オーバーロードの失敗を再現し、その後、影響を受ける構成全体でパス処理がコンパイルでき、動作することを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
cpp
領域
build-system
issue の種類
バグ
難易度
2/5
見積もり時間
1〜3時間
活発さ
静か
明瞭さ
明確に書かれている
初心者へのやさしさ
78/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。