What's wrong with that (sorry for the terrible name):
template<typename T, typename... Us>concept any_of = (std::is_same_v<T, Us> || ...);
void f(any_of<char, uint8_t> auto x);
template<any_of<char, uint8_t> T>void f(std::basic_string<T> x);
On 04.03.2020 15:03, Михаил Найденов wrote:Well, template<class T> concept charOrUInt8 = std::is_same_v<char> || std::is_same_v<uint8_t>; void f (charOrUInt8 auto x); template<charOrUInt8 T> void f (std::basic_string<T> x) Close enough, if ask me :)That still requires writing a series of std::is_same_v<> but this time I'd also have to invent a name for the concept. I'd like to avoid that and keep the actual list of types right in the arguments list. Of course, if I wanted to reuse the allowed types list, I'd use a concept.