# `fn_name` Macros that produce the name of the function they're invoked within. ## Uninstantiated Names The `uninstantiated!` macro produces the name of the surrounding function or method, *without* generics instantiated; e.g.: ```rust struct GenericType(A); impl GenericType { fn generic_method(self, _: B) -> &'static str { fn_name::uninstantiated!() } } fn main() { assert_eq!( GenericType(42u8).generic_method(false), "GenericType<_>::generic_method" ); } ``` ## Instantiated Names The `instantiated!` macro produces the name of the surrounding function or method, *including* instantiated generics (if any); e.g.: ```rust struct GenericType(A); impl GenericType { fn generic_method(self, _: B) -> &'static str { fn_name::instantiated!() } } fn main() { assert_eq!( GenericType(42u8).generic_method(false), "GenericType::generic_method" ); } ``` ## Limitations The expansion of these macros is not (yet) const evaluable; their implementations rely on `core::any::type_name`, which is not a `const fn`.