https://stackoverflow.com/questions/38957516/function-overloading-in-c-passing-arguments-by-value-or-by-reference/38958630
https://stackoverflow.com/questions/34802142/c-function-overloading-resolution-involving-pass-by-value-reference-and-const/34802263