diff options
| author | Michael Goulet <michael@errs.io> | 2023-03-22 16:23:36 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2023-03-23 19:00:04 +0000 |
| commit | 2bab4223939da298593bf1f46154bd8cc0af6070 (patch) | |
| tree | 9b2e97f03197ed284385cc5fdc3cf70fc9052266 /tests | |
| parent | df7fd9995f10627f25ccb325f693a11b3395a73c (diff) | |
| download | rust-2bab4223939da298593bf1f46154bd8cc0af6070.tar.gz rust-2bab4223939da298593bf1f46154bd8cc0af6070.zip | |
Return nested obligations from canonical response var unification
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/traits/new-solver/alias-eq-in-canonical-response.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/ui/traits/new-solver/alias-eq-in-canonical-response.rs b/tests/ui/traits/new-solver/alias-eq-in-canonical-response.rs new file mode 100644 index 00000000000..4bfb6323a53 --- /dev/null +++ b/tests/ui/traits/new-solver/alias-eq-in-canonical-response.rs @@ -0,0 +1,40 @@ +// check-pass +// compile-flags: -Ztrait-solver=next + +trait Foo { + type Gat<'a> + where + Self: 'a; + fn bar(&self) -> Self::Gat<'_>; +} + +enum Option<T> { + Some(T), + None, +} + +impl<T> Option<T> { + fn as_ref(&self) -> Option<&T> { + match self { + Option::Some(t) => Option::Some(t), + Option::None => Option::None, + } + } + + fn map<U>(self, f: impl FnOnce(T) -> U) -> Option<U> { + match self { + Option::Some(t) => Option::Some(f(t)), + Option::None => Option::None, + } + } +} + +impl<T: Foo + 'static> Foo for Option<T> { + type Gat<'a> = Option<<T as Foo>::Gat<'a>> where Self: 'a; + + fn bar(&self) -> Self::Gat<'_> { + self.as_ref().map(Foo::bar) + } +} + +fn main() {} |
