I want to write an auxiliary template that checks if the template parameter package has a common type, i.e. if applying std::common_type to a package determines the type.
Using std :: void_t with SFINAE, I came up with the following definition:
template<typename... Types, typename Enable = void> struct has_common_type : std::false_type { }; template<typename... Types> struct has_common_type<Types..., std::void_t<std::common_type<Types...>::type>> : std::true_type { };
This, however, does not work, because the template parameter package must be the last parameter. The compiler causes the following error:
error: template parameter pack must be the last template parameter template<typename... Types, typename Enable = void>
How can one define such a pattern?
sakra source share