This is derived work from the
[`stdext`](https://crates.io/crates/stdext/0.3.3) crate,
including the following modifications:

- rename `function_name` to `fn_name`.
- rename `compile_warning` to `compile_warn`.
- make `compile_warn` use the identifier for the message.
- make it `no-std`.
- misc. refactors.
