#include template concept bool Addable = requires(Type lh, Type rh) { lh + rh; }; template concept bool Incrementable = requires(Type tp) { ++tp; }; //and template concept bool And = requires(Type lh, Type rh) { lh + rh; } and requires(Type tp) { ++tp; }; template Type add(Type const &lh, Type const &rh) { return lh + rh; } //= using namespace std; int main() { add(0, 0); // add(map{}, map{}); }