| //@ revisions: current next |
| //@ ignore-compare-mode-next-solver (explicit revisions) |
| //@[next] compile-flags: -Znext-solver |
| //@ check-fail |
| |
| // Next solver revision included because of trait-system-refactor-initiative#234. |
| // If we end up in a query cycle, it should be okay as long as results are the same. |
| |
| #![feature(const_trait_impl)] |
| #![feature(c_variadic)] |
| #![feature(fn_delegation)] |
| #![allow(incomplete_features)] |
| |
| mod opaque { |
| trait Trait {} |
| impl Trait for () {} |
| |
| mod to_reuse { |
| use super::Trait; |
| |
| pub fn opaque_ret() -> impl Trait { () } |
| } |
| |
| trait ToReuse { |
| fn opaque_ret() -> impl Trait { () } |
| } |
| |
| // FIXME: Inherited `impl Trait`s create query cycles when used inside trait impls. |
| impl ToReuse for u8 { |
| reuse to_reuse::opaque_ret; //~ ERROR cycle detected when computing type |
| } |
| impl ToReuse for u16 { |
| reuse ToReuse::opaque_ret; //~ ERROR cycle detected when computing type |
| } |
| } |
| |
| mod recursive { |
| mod to_reuse1 { |
| pub mod to_reuse2 { |
| pub fn foo() {} |
| } |
| |
| pub reuse to_reuse2::foo; |
| } |
| |
| reuse to_reuse1::foo; |
| //~^ ERROR recursive delegation is not supported yet |
| } |
| |
| mod effects { |
| #[const_trait] |
| trait Trait { |
| fn foo(); |
| } |
| |
| reuse Trait::foo; |
| //~^ ERROR type annotations needed |
| } |
| |
| fn main() {} |