Why are 'static
lifetimes required to be written explicitly in const
and static
references?
const MY_STRING: &'static str = "Hello world!";
const MY_ARRAY_REF: &'static [int, ..1000] = &[0, ..1000];
If I understand the motivation correctly, the types should be written there explicitly for the similar reasons as for function declarations - they represent interfaces and shouldn’t change silently after changes to initializer or function body.
But the lifetimes for const
/static
references are always 'static
and will not change, can’t they be elided?
These explicit 'static
s were relatively annoying before, with constant strings, but now they are even more annoying, because after introduction of const
constant arrays have to be written through references.
const MY_ARRAY1: [int, ..1000] = [0, ..1000]; // Rvalue arrays are bad
static MY_ARRAY2: [int, ..1000] = [0, ..1000]; // `static` arrays can't be used in constant expressions
const MY_ARRAY3: &'static [int, ..1000] = &[0, ..1000]; // OK, but more verbose than necessary