| //@ revisions: pass fail |
| //@[pass] check-pass |
| |
| #![allow(internal_features)] |
| #![feature(staged_api)] |
| #![stable(feature = "a", since = "1.1.1" )] |
| |
| /// Test the behaviour of marking a trait with #[unstable_feature_bound]. |
| /// In this testcase, even though the trait method `bar` and the `struct Foo` are |
| /// both stable, #[unstable_feature_bound] is still needed at the call site of Foo::bar(). |
| |
| #[stable(feature = "a", since = "1.1.1" )] |
| struct Foo; |
| |
| #[unstable(feature = "foo", issue = "none" )] |
| #[unstable_feature_bound(foo)] |
| trait Bar { |
| #[stable(feature = "a", since = "1.1.1" )] |
| fn bar() {} |
| } |
| |
| #[unstable_feature_bound(foo)] |
| impl Bar for Foo { |
| } |
| |
| #[cfg_attr(pass, unstable_feature_bound(foo))] |
| fn moo() { |
| Foo::bar(); |
| //[fail]~^ ERROR: unstable feature `foo` is used without being enabled. |
| } |
| |
| |
| fn main() {} |