diff options
Diffstat (limited to 'src/test/ui/traits/impl-object-overlap-issue-23853.rs')
-rw-r--r-- | src/test/ui/traits/impl-object-overlap-issue-23853.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/test/ui/traits/impl-object-overlap-issue-23853.rs b/src/test/ui/traits/impl-object-overlap-issue-23853.rs new file mode 100644 index 000000000..e490967b6 --- /dev/null +++ b/src/test/ui/traits/impl-object-overlap-issue-23853.rs @@ -0,0 +1,18 @@ +// run-pass +// Test that we are able to compile the case where both a blanket impl +// and the object type itself supply the required trait obligation. +// In this case, the blanket impl for `Foo` applies to any type, +// including `Bar`, but the object type `Bar` also implicitly supplies +// this context. + +trait Foo { fn dummy(&self) { } } + +trait Bar: Foo { } + +impl<T:?Sized> Foo for T { } + +fn want_foo<B:?Sized+Foo>() { } + +fn main() { + want_foo::<dyn Bar>(); +} |