Skip to content

format関数を使えるようにC++20に移行する#2014

Closed
berryzplus wants to merge 8 commits into
sakura-editor:masterfrom
berryzplus:feature/enable_stdcpp20
Closed

format関数を使えるようにC++20に移行する#2014
berryzplus wants to merge 8 commits into
sakura-editor:masterfrom
berryzplus:feature/enable_stdcpp20

Conversation

@berryzplus

Copy link
Copy Markdown
Contributor

PR対象

  • アプリ(サクラエディタ本体)
  • テストコード
  • ビルド手順/CI

カテゴリ

  • 改善

PR の背景

現状のコードベースは C++17 準拠で、C++のフォーマット関数を利用できずに不便です。

仕様・動作説明

コードベースの準拠レベルを C++20 に変更し、C++のフォーマット関数を利用できるようにします。

PR の影響範囲

機能的な影響はありません。
vs2017 ではビルドできなくなります。

テスト内容

関連 issue, PR

参考資料

C++20では u8リテラル文字列 と MBCSリテラル文字列 が別型となり、ビルドが通らなくなるため。
C++20では u8リテラル文字列 と MBCSリテラル文字列 が別型となり、ビルドが通らなくなるため。
C++コンパイラーのC++準拠レベルをC++20にして std::format を使えるようにする
C++20対応は vs2019 からなので Appveyor のビルドイメージを変更する
@AppVeyorBot

Copy link
Copy Markdown

Build sakura 1.0.4451 failed (commit aa72867765 by @berryzplus)

C++コンパイラーのC++準拠レベルをC++20にして std::format を使えるようにする
@AppVeyorBot

Copy link
Copy Markdown

Build sakura 1.0.4452 failed (commit 867dc47e77 by @berryzplus)

@sonarqubecloud

sonarqubecloud Bot commented Mar 8, 2025

Copy link
Copy Markdown

@berryzplus

Copy link
Copy Markdown
Contributor Author

状況

初回ビルドは Appveyor のビルドイメージを vs2019 に変更しようとして、「cinst がない」のエラーでビルド失敗。
2回目のビルドは Appveyor のビルドイメージを戻して、「vs2017stdcpp20 に未対応」のエラーでビルド失敗。

今後の対応

Appveyor の問題を解決できるまで凍結。

@beru beru left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VS2017ではビルド出来なくなる変更という事で README.md ファイルの Build Requirements の記載も更新しておくと良いと思います。 link

@berryzplus

Copy link
Copy Markdown
Contributor Author

「めんどうなのでappveyor辞めます」 or 「c++20使えるようにビルドイメージ更新します」の対応が先です。
「appveyorやめました」ないし「c++20対応によりvs2019以降必須となりました」はその時に修正する感じです。

appveyorの最新イメージを使ってビルドできるか?の検証は行ってもよいと思います。

choco2系でcinstが使えなくなった対応。
@sonarqubecloud

Copy link
Copy Markdown

@AppVeyorBot

Copy link
Copy Markdown

@berryzplus

Copy link
Copy Markdown
Contributor Author

Appveyorのベースイメージを Visual Studio 2019 以降にするとビルドに失敗する理由は、
Appveyor の Visual Studio 2019 イメージで 2系Chocolatey が採用されていること、
2系 Chocolatey では cinst、cup などの短縮コマンドが使えなくなっていること、
などの複合要素っぽい。

やっぱAppveyor使うの辞めるのが一番だよねぇ。
※ビルドイメージを Visual Studio 2022 に更新した場合に打てる対策の効果は確認できています。

@berryzplus

Copy link
Copy Markdown
Contributor Author

#2091 のマージによりAppveyorを廃止したので、状況が変わった。

進化の系譜はこんな感じ。
sprintf(Cランタイム)
strprintf(Cランタイム互換の独自実装)
fmt::format(C++スタイルのテンプレート関数、外部ライブラリ利用、C++17以前でも利用可能)
std::format(C++スタイルのテンプレート関数、C++20標準、C++20以降でのみ利用可能)

結論がでそうにないのでしばらく放置。

@berryzplus berryzplus closed this Jul 26, 2025
@berryzplus berryzplus deleted the feature/enable_stdcpp20 branch July 26, 2025 12:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants