|  | // Test that we do not currently display `[const]` in rustdoc | 
|  | // as that syntax is currently provisional; `[const] Destruct` has | 
|  | // no effect on stable code so it should be hidden as well. | 
|  | // | 
|  | // To future blessers: make sure that `const_trait_impl` is | 
|  | // stabilized when changing `@!has` to `@has`, and please do | 
|  | // not remove this test. | 
|  | // | 
|  | // FIXME(const_trait_impl) add `const_trait` to `Fn` so we use `[const]` | 
|  | // FIXME(const_trait_impl) restore `const_trait` to `Destruct` | 
|  | #![feature(const_trait_impl)] | 
|  | #![crate_name = "foo"] | 
|  |  | 
|  | use std::marker::Destruct; | 
|  |  | 
|  | pub struct S<T>(T); | 
|  |  | 
|  | //@ !has foo/trait.Tr.html '//pre[@class="rust item-decl"]/code/a[@class="trait"]' '[const]' | 
|  | //@ has - '//pre[@class="rust item-decl"]/code/a[@class="trait"]' 'Fn' | 
|  | //@ !has - '//pre[@class="rust item-decl"]/code/span[@class="where"]' '[const]' | 
|  | //@ has - '//pre[@class="rust item-decl"]/code/span[@class="where"]' ': Fn' | 
|  | #[const_trait] | 
|  | pub trait Tr<T> { | 
|  | //@ !has - '//section[@id="method.a"]/h4[@class="code-header"]' '[const]' | 
|  | //@ has - '//section[@id="method.a"]/h4[@class="code-header"]/a[@class="trait"]' 'Fn' | 
|  | //@ !has - '//section[@id="method.a"]/h4[@class="code-header"]/span[@class="where"]' '[const]' | 
|  | //@ has - '//section[@id="method.a"]/h4[@class="code-header"]/div[@class="where"]' ': Fn' | 
|  | fn a<A: /* [const] */ Fn() /* + [const] Destruct */>() | 
|  | where | 
|  | Option<A>: /* [const] */ Fn() /* + [const] Destruct */, | 
|  | { | 
|  | } | 
|  | } | 
|  |  | 
|  | //@ has - '//section[@id="impl-Tr%3CT%3E-for-T"]' '' | 
|  | //@ !has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]' '[const]' | 
|  | //@ has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/a[@class="trait"]' 'Fn' | 
|  | //@ !has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/span[@class="where"]' '[const]' | 
|  | //@ has - '//section[@id="impl-Tr%3CT%3E-for-T"]/h3[@class="code-header"]/div[@class="where"]' ': Fn' | 
|  | impl<T: /* [const] */ Fn() /* + [const] Destruct */> const Tr<T> for T | 
|  | where | 
|  | Option<T>: /* [const] */ Fn() /* + [const] Destruct */, | 
|  | { | 
|  | fn a<A: /* [const] */ Fn() /* + [const] Destruct */>() | 
|  | where | 
|  | Option<A>: /* [const] */ Fn() /* + [const] Destruct */, | 
|  | { | 
|  | } | 
|  | } | 
|  |  | 
|  | //@ !has foo/fn.foo.html '//pre[@class="rust item-decl"]/code/a[@class="trait"]' '[const]' | 
|  | //@ has - '//pre[@class="rust item-decl"]/code/a[@class="trait"]' 'Fn' | 
|  | //@ !has - '//pre[@class="rust item-decl"]/code/div[@class="where"]' '[const]' | 
|  | //@ has - '//pre[@class="rust item-decl"]/code/div[@class="where"]' ': Fn' | 
|  | pub const fn foo<F: /* [const] */ Fn() /* + [const] Destruct */>() | 
|  | where | 
|  | Option<F>: /* [const] */ Fn() /* + [const] Destruct */, | 
|  | { | 
|  | F::a() | 
|  | } | 
|  |  | 
|  | impl<T> S<T> { | 
|  | //@ !has foo/struct.S.html '//section[@id="method.foo"]/h4[@class="code-header"]' '[const]' | 
|  | //@ has - '//section[@id="method.foo"]/h4[@class="code-header"]/a[@class="trait"]' 'Fn' | 
|  | //@ !has - '//section[@id="method.foo"]/h4[@class="code-header"]/span[@class="where"]' '[const]' | 
|  | //@ has - '//section[@id="method.foo"]/h4[@class="code-header"]/div[@class="where"]' ': Fn' | 
|  | pub const fn foo<B, C: /* [const] */ Fn() /* + [const] Destruct */>() | 
|  | where | 
|  | B: /* [const] */ Fn() /* + [const] Destruct */, | 
|  | { | 
|  | B::a() | 
|  | } | 
|  | } |