如何创建std ::预期<void, void>在没有任何其他数据的情况下发出成功或异常的信号?

问题描述 投票:0回答:1

可以为a

unexpected
创建一个类型的对象?
这里是一个简单的例子。

std::expected<void, void>

这不编译,至少没有GCC-14。
#include <expected>

[[nodiscard]]
std::expected<void, void> do_logic() {
    return std::unexpected<void>();
}
我很惊讶此代码不会编译,因为以下编译:

error: no matching function for call to ‘std::unexpected<void>::unexpected()’
有一种方法可以使其与

#include <expected> [[nodiscard]] std::expected<void, int> do_logic() { return std::unexpected<int>(-1); }

一起使用
    

一个程序,可以实例化非对象类型的意外定义,数组类型,意外的专业化或CV合格类型是不正确的。

c++ c++23
1个回答
0
投票
https://eel.is/c++draft/expected.un.general#2

<void, void>

不是对象类型,因为

AN

AN

abjignt类型是(可能是CV标记的)类型,它不是函数类型,而不是参考类型,而不是CV void
.

https://eel.is/c++draft/basic.types#general-8 void

继承了
std::expected

的要求,因此禁止std::unexpected

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.