r[type.fn-pointer]
r[type.fn-pointer.syntax]
Syntax
BareFunctionType :
ForLifetimes? FunctionTypeQualifiersfn
(FunctionParametersMaybeNamedVariadic?)BareFunctionReturnType?FunctionTypeQualifiers:
unsafe? (externAbi?)?BareFunctionReturnType:
->TypeNoBoundsFunctionParametersMaybeNamedVariadic :
MaybeNamedFunctionParameters | MaybeNamedFunctionParametersVariadicMaybeNamedFunctionParameters :
MaybeNamedParam (,MaybeNamedParam )*,?MaybeNamedParam :
OuterAttribute* ( ( IDENTIFIER |_):)? TypeMaybeNamedFunctionParametersVariadic :
( MaybeNamedParam,)* MaybeNamedParam,OuterAttribute*...
r[type.fn-pointer.intro] Function pointer types, written using the fn keyword, refer to a function whose identity is not necessarily known at compile-time.
An example where Binop is defined as a function pointer type:
fn add(x: i32, y: i32) -> i32 { x + y } let mut x = add(5,7); type Binop = fn(i32, i32) -> i32; let bo: Binop = add; x = bo(5,7);
r[type.fn-pointer.coercion] Function pointers can be created via a coercion from both function items and non-capturing, non-async closures.
r[type.fn-pointer.qualifiers] The unsafe qualifier indicates that the type's value is an unsafe function, and the extern qualifier indicates it is an extern function.
r[type.fn-pointer.constraint-variadic] Variadic parameters can only be specified with extern function types with these calling conventions:
Ccdeclsystemaapcssysv64win64efiapir[type.fn-pointer.attributes]
Attributes on function pointer parameters follow the same rules and restrictions as regular function parameters.