rustsyntax

What does returning "!" mean in Rust?


Recently I came across a function in Rust that returned ! instead of basic type, like this:

fn my_function() -> ! {
    // ...
}

What does it mean? I was unable to find piece of information about this in The Rust Book. What data does this function return with such indicator?


Solution

  • It means the function never returns (usually because it unconditionally panics or otherwise ends the program, or because it contains an infinite loop that prevents a return from ever happening).

    The appendix describes it as:

    ! Always empty bottom type for diverging functions

    where "diverging" means "never returns".