handle const arguments by defining a 'tuple' metafunction leveraging std::remove_const and std::remove_reference