Static variables with the `#[linkage]` attribute within external blocks must have one of the following types, which are equivalent to a nullable pointer in C: * `*mut T` or `*const T`, where `T` may be any type. * An enumerator type with no `#[repr]` attribute and with two variants, where one of the variants has no fields, and the other has a single field of one of the following non-nullable types: * Reference type * Function pointer type The variants can appear in either order. For example, the following declaration is invalid: ```compile_fail,E0791 #![feature(linkage)] extern "C" { #[linkage = "extern_weak"] static foo: i8; } ``` The following declarations are valid: ``` #![feature(linkage)] extern "C" { #[linkage = "extern_weak"] static foo: Option; #[linkage = "extern_weak"] static bar: Option<&'static i8>; #[linkage = "extern_weak"] static baz: *mut i8; } ```