错误:为lambda返回类型推导出不一致的类型“std::optional<double>”和“std::nullopt_t”

auto operator  | (auto f1, auto f2) {
    return [f1, f2]() {
        if(f1) {
            return f2(f1.value());
        }
         return std::nullopt;
    };
}


int main() {
    std::optional<int> a{11},b{};

    auto z = a | [](auto b) -> std::optional<double>{
        return b / 3.0;
    };

    auto x = z();
}

如何在运算符中使 lambda 返回类型通用| 功能 ?

想法是实现运营商| 它采用 optional 和 lambda ,仅当 optional 不是 nullopt 时才处理 lambda 并返回 lambda 返回类型的 optional

回答

您可以使用?

auto operator  | (auto f1, auto f2) {
  return [f1, f2]() {
    return f1?f2(f1.value()):std::nullopt;
  };
}

因为它的类型组合规则没有自动返回类型推导那么严格。


以上是错误:为lambda返回类型推导出不一致的类型“std::optional&lt;double&gt;”和“std::nullopt_t”的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>