#include <type_traits>
#include <tuple>
template<typename... Types, typename... Args>
void fxn(Args&&... args) {
static_assert(std::is_same<std::tuple<Types...>, std::tuple<int, bool>>::value, "!");
static_assert(std::is_same<std::tuple<Args...>, std::tuple<int, double, char>>::value, "!");
}
int main()
{
fxn<int, bool>(42, 3.14, 'c');
}
ICAgICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICAgICNpbmNsdWRlIDx0dXBsZT4KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcywgdHlwZW5hbWUuLi4gQXJncz4KICAgIHZvaWQgZnhuKEFyZ3MmJi4uLiBhcmdzKSB7CiAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxzdGQ6OnR1cGxlPFR5cGVzLi4uPiwgc3RkOjp0dXBsZTxpbnQsIGJvb2w+Pjo6dmFsdWUsICIhIik7CiAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxzdGQ6OnR1cGxlPEFyZ3MuLi4+LCBzdGQ6OnR1cGxlPGludCwgZG91YmxlLCBjaGFyPj46OnZhbHVlLCAiISIpOwogICAgfQoKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICBmeG48aW50LCBib29sPig0MiwgMy4xNCwgJ2MnKTsKICAgIH0K