#include<print>#include<string>#include<expected>template<typenameE=std::string>usingErr=std::unexpected<E>;template<typenameT,typenameE=std::string>usingResult=std::expected<T,E>;structInner{inta,b;};structX{Inner*i_;X(Inner*i){std::println("X()");i_=i;}~X(){std::println("~X() delete inner obj");deletei_;}};autofoo(boolflag)->Result<X>{if(!flag){returnErr<>("Flag is false!");}Inner*i=newInner();i->a=1;i->b=2;returnResult<X>{i};}intmain(){std::println("main--1");{std::println("main--2");autox=foo(true);std::println("main--3");}{std::println("main--4");autox=foo(false);std::println("Error message is: {}",x.error());std::println("main--5");}std::println("main--6");}
输出为:
1
2
3
4
5
6
7
8
9
main--1
main--2
X()
main--3
~X() delete inner obj
main--4
Error message is: Flag is false!
main--5
main--6