为什么 std::expected 中没有一元操作?

Des*_*old 5 c++ c++23 std-expected

std::optional在 C++23 中,采用了一元运算 in ,后来又采用了std::expected. 为什么像and_then、、、这样的一元操作transform没有or_else包含在主论文中?

Bar*_*rry 5

更新:std::expected在 C++23 中将有单子操作。


该std::expected提案非常古老。采用的修订版是 P0323R12,这已经表明它的使用寿命很长,但该论文甚至早于 P 编号系统,并以N4015开始,日期为 2014 年 5 月。

我提出这个问题是因为std::expected,即使是它本身,也需要很长时间才能完成这个过程。相比之下,纸张的一元操作直到2017 年 10 月std::optional才首次出现。从那时起,想要得到它就只是一个漫长的过程。std::expected

有一篇论文提出了 的一元运算std::expected,即P2505R0,但目前它还非常不完整,需要大量工作。新 C++23 功能的设计窗口已关闭,但如果稍后有 NB 评论请求它,我不会感到惊讶。

至少我们终于拥有了std::expected。


几个月后,这里出现了一条 NB 评论,要求使用单子运算符std::expected,P2505R5于 2022 年 11 月在 Kona 中被 C++23 采用。