Quick summary ↬ In this short article, I have posted an example that does the reinterpret_cast on an integer and convert it to char pointer and then the value pointed by the char pointer is converted to r-value reference all in a macro.
Beautiful code #1
|
|
Beautiful code #1 explanation
Let me explain the macro first.
|
|
We have declared a macro called CAPSY_DECLVAL
which can accept any number of variables (note the …
). In the macro definition we have double reinterpret_cast
. The outcome of the far right reinterpret_cast
is converting the integer 1024
to char*
. This is very dangerous conversion but that is how reinterpret_cast
works. Once it is converted to char*
the value pointed by the char*
is passed to the parent level reinterpret_cast
. The sub code is *reinterpret_cast<char*>(1024)
.Now the __VA_ARGS__
has the value int
which is passed in the main function as an argument to the macro.
Let’s move one step to the left again and see that a variable add_rvalue_ref
is called that is just a r-value reference T&&
. So the interpretation in our example is int&&
. Now let’s write the whole macro after applying the template parameter as shown below:
|
|
In short, an integer converted to char*
and then the value pointed by the char*
is again converted to int&& and that is all defined inside the macro CAPSY_DECLVAL which accepts variadic parameters. Inside the main function we just print the data type of the variable we arrive at using the code typeid(decltype(CAPSY_DECLVAL(int))).name()
. Isn’t that beautiful?
I will write series of beautiful code and I hope to come up with 500 snippets of beautiful C++ code in 2023.
You will also like — More Articles
https://fluentprogrammer.com/beautiful-code-2-enable_if_t-template-inside-a-template/ https://fluentprogrammer.com/beautiful-code-3-no_unique_address_cpp_20-feature/ https://fluentprogrammer.com/beautiful-code-4-any_of-none_of-all_of/ https://fluentprogrammer.com/beautiful-code-5-for_each-optional/ https://fluentprogrammer.com/beautiful-code-6-copy_if-remove_copy_if-copy-back_inserter/