pub fn type_name_of_val<T>(_val: &T) -> &'static str where
    T: ?Sized
🔬 This is a nightly-only experimental API. (type_name_of_val #66359)
Expand description

Returns the name of the type of the pointed-to value as a string slice. This is the same as type_name::<T>(), but can be used where the type of a variable is not easily available.

Note

This is intended for diagnostic use. The exact contents and format of the string are not specified, other than being a best-effort description of the type. For example, type_name_of_val::<Option<String>>(None) could return "Option<String>" or "std::option::Option<std::string::String>", but not "foobar". In addition, the output may change between versions of the compiler.

This function does not resolve trait objects, meaning that type_name_of_val(&7u32 as &dyn Debug) may return "dyn Debug", but not "u32".

The type name should not be considered a unique identifier of a type; multiple types may share the same type name.

The current implementation uses the same infrastructure as compiler diagnostics and debuginfo, but this is not guaranteed.

Examples

Prints the default integer and float types.

#![feature(type_name_of_val)]
use std::any::type_name_of_val;

let x = 1;
println!("{}", type_name_of_val(&x));
let y = 1.0;
println!("{}", type_name_of_val(&y));
Run