Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[C++23] expected #1066

Closed
5 tasks done
faithandbrave opened this issue Jan 9, 2023 · 8 comments
Closed
5 tasks done

[C++23] expected #1066

faithandbrave opened this issue Jan 9, 2023 · 8 comments

Comments

@faithandbrave
Copy link
Member

faithandbrave commented Jan 9, 2023

  • P0323R12 std::expected
  • P2549R1 std::unexpected<E> should have error() as member accessor
  • P2505R5 Monadic Functions for std::expected

作業タスク

  • expected<T, E>
  • expected<cv void, E>
  • unexpected<E>
  • unexpect_t
  • bad_expected_access<E>
@yohhoy yohhoy self-assigned this Jan 25, 2023
yohhoy added a commit that referenced this issue Jan 29, 2023
yohhoy added a commit that referenced this issue Jan 31, 2023
s/有効値/正常値/g, パラメータ名明記, 内部リンク追加
yohhoy added a commit that referenced this issue Jan 31, 2023
パラメータ名明記, 内部リンク追加
yohhoy added a commit that referenced this issue Feb 1, 2023
yohhoy added a commit that referenced this issue Feb 1, 2023
yohhoy added a commit that referenced this issue Feb 3, 2023
yohhoy added a commit that referenced this issue Feb 3, 2023
yohhoy added a commit that referenced this issue Feb 5, 2023
@yohhoy
Copy link
Member

yohhoy commented Feb 5, 2023

C++23クラステンプレートstd::expected<T, E>には、std::expected<cv void, E>部分特殊化バージョンが定義されています。

当初はexpected各メンバページに部分特殊化の説明を追加していく想定でしたが、思ったより両者の差分が大きいこと(T=cv voidを前提とした簡約化やオーバーロード差異)に気づきました。

そこで、プライマリレンプレートと部分特殊化バージョンをクラス説明レベルで分離してしまった方がスッキリしそうです。

ディレクトリ構造の素案:

  • /reference/expected/expected/(各種メンバ).md
  • /reference/expected/expected.void/(各種メンバ).md

@faithandbrave さん:
現時点のcpprefjpサイトではこのような「プライマリンプレートと部分特殊化でクラスレベルの分離」を行っている事例がないため、どのように対処するのが適切かを相談させてください。

@faithandbrave
Copy link
Member Author

一旦やりやすい方法で書いてもらって、それをあとでルール化しましょうか。
書いてるうちにうまくいかないところとか出てくるかもしれませんので。
いまのところ、そういった事例はないです。

あとでstart_editing/directory_structure.mdにPull Requestいただければ

@faithandbrave
Copy link
Member Author

https://cpprefjp.github.io/reference/future/promise/set_value.html

promise<void>とかは、ページは分けていないですが、オーバーロードのように特殊化の説明を分けているものはあります。

@yohhoy
Copy link
Member

yohhoy commented Feb 5, 2023

promise<R>の説明構造を確認してみました : https://eel.is/c++draft/futures.promise
ちょっとした違いであれば、プライマリンプレートと同一ページで説明してしまえばOKですね。(bad_expected_access<void>はその予定)

expected<T,E>は特にコンストラクタ/代入演算子/swapページが(プライマリンプレートのみの時点で)ごちゃごちゃしているので、ひとまずクラスレベル分離の方向で進めたいと思います。

yohhoy added a commit that referenced this issue Feb 9, 2023
実験的に`expected<T,E>`プライマリテンプレートと`expected<cv void,E>`部分特殊化を
フォルダ構造分離したうえで各種メンバの説明ページを作成してみる。
@yohhoy
Copy link
Member

yohhoy commented Feb 9, 2023

expected<T,E>は[...]、ひとまずクラスレベル分離の方向で進めたいと思います。

996f8d3 にて、実験的に数ページだけcpprefjpサイトへデプロイしてみました。

自分で確認した範囲では、2つの問題を見つけました:

  1. ページ上部のパンくずリストが部分的に機能しない。これは(人力)リダイレクトを促すページを作ってしまえば解決すると思います。
    @faithandbrave さん:サイト変換ルールを正しく把握していないのですが、ファイルパスは /reference/expected/expected.void.md でよいでしょうか?

structure

  1. サイト内検索(crsearch)で、プライマリテンプレートと部分特殊化版で2重にHITしてしまう。こちらは、この挙動で良しとするしかないかなと考えています。

crsearch

@faithandbrave
Copy link
Member Author

@faithandbrave さん:サイト変換ルールを正しく把握していないのですが、ファイルパスは /reference/expected/expected.void.md でよいでしょうか?

はい、それで大丈夫です。

サイト内検索(crsearch)で、プライマリテンプレートと部分特殊化版で2重にHITしてしまう。こちらは、この挙動で良しとするしかないかなと考えています。

expected<void>[meta class]
とすれば分けられそうな気もしますが、どうでしょう

@yohhoy
Copy link
Member

yohhoy commented Feb 9, 2023

以下の対処を行いました。

  • /reference/expected/expected.void.md プレイスホルダーページを用意
  • 各メンバ説明ページのメタ情報は expected.void[meta class] を記述

@yohhoy
Copy link
Member

yohhoy commented Feb 11, 2023

done!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants