Add E0011 explanation

This commit is contained in:
Guillaume Gomez 2015-05-30 00:44:22 +02:00
parent 474c6e0ae4
commit 9eb416b8a4

View file

@ -176,6 +176,38 @@ struct X { x: (), }
the heap at runtime, and therefore cannot be done at compile time.
"##,
E0011: r##"
Using a user-defined operator on const/static variable is restricted to what
can be evaluated at compile-time. Using an user-defined operator could call a
user-defined function, which is not allowed.
Bad example:
```
use std::ops::Index;
struct Foo { a: u8 }
impl ::std::ops::Index<u8> for Foo {
type Output = u8;
fn index<'a>(&'a self, idx: u8) -> &'a u8 { &self.a }
}
const a: Foo = Foo { a: 0u8 };
const b: u8 = a[0]; // Index trait is defined by the user, bad!
```
Only operators on builtin types are allowed.
Example:
```
const a: &'static [i32] = &[1, 2, 3];
const b: i32 = a[0]; // Good!
```
"##,
E0013: r##"
Static and const variables can refer to other const variables. But a const
variable cannot refer to a static variable. For example, `Y` cannot refer to `X`
@ -899,7 +931,6 @@ fn bar(&self) -> i32 { self.0 }
register_diagnostics! {
E0011,
E0014,
E0016,
E0017,