Are you limited to C++17? C++20 template lambdas make this way easier. Also, using a
tuple
like this is probably bad for build times. Make an empty struct template to represent type lists.