added: use variadic templates for msvc2013 and above