#include #include #include //addable template concept Addable = requires(Type par) { ++par; // `Type' variables must support par++; // pre-/postfix increment } and requires(Type lhs, Type rhs) // and also addition { lhs + rhs; }; //= // typename Type::value_type; //index template concept HasIndex = requires(Type tp) { tp[0]; }; template auto idx(Type const &obj, size_t idx) { return obj[idx]; } //= template concept HasStrIndex = requires(Type tp) { tp[std::string{}]; }; template auto value(Type &obj, std::string const &key) { return obj[key]; } using namespace std; int main() { // idx(1, 2); string str; cout << idx(str, 1) << endl; map msd; value(msd, "hi"); }