Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Correctly check for opaque types in
assoc_ty_def
- Loading branch information
1 parent
c5840f9
commit 5e92625
Showing
3 changed files
with
40 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// Regression test for issue 67856 | ||
|
||
#![feature(unboxed_closures)] | ||
#![feature(type_alias_impl_trait)] | ||
#![feature(fn_traits)] | ||
|
||
trait MyTrait {} | ||
impl MyTrait for () {} | ||
|
||
impl<F> FnOnce<()> for &F { | ||
//~^ ERROR conflicting implementations | ||
//~| ERROR type parameter `F` must be used | ||
type Output = impl MyTrait; | ||
extern "rust-call" fn call_once(self, _: ()) -> Self::Output {} | ||
} | ||
fn main() {} |
23 changes: 23 additions & 0 deletions
23
src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
error[E0119]: conflicting implementations of trait `std::ops::FnOnce<()>` for type `&_`: | ||
--> $DIR/incoherent-assoc-imp-trait.rs:10:1 | ||
| | ||
LL | impl<F> FnOnce<()> for &F { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: conflicting implementation in crate `core`: | ||
- impl<A, F> std::ops::FnOnce<A> for &F | ||
where F: std::ops::Fn<A>, F: ?Sized; | ||
|
||
error[E0210]: type parameter `F` must be used as the type parameter for some local type (e.g., `MyStruct<F>`) | ||
--> $DIR/incoherent-assoc-imp-trait.rs:10:6 | ||
| | ||
LL | impl<F> FnOnce<()> for &F { | ||
| ^ type parameter `F` must be used as the type parameter for some local type | ||
| | ||
= note: implementing a foreign trait is only possible if at least one of the types for which is it implemented is local | ||
= note: only traits defined in the current crate can be implemented for a type parameter | ||
|
||
error: aborting due to 2 previous errors | ||
|
||
Some errors have detailed explanations: E0119, E0210. | ||
For more information about an error, try `rustc --explain E0119`. |