
Hi, During the implementation of my static_map, I recently encountered a problem: how to deal with string types? For example: constexpr auto cmap_str = make_static_map({ {"abc", 1}, {"bcd", 2} }); static_assert(cmap_str["abc"] == 1, "test"); In my implementation, KeyType requires 1. constexpr operator==, which is not provided by const char * 2. constexpr hash(const KeyType&). Since there is no such thing in standard library, I have to implement some in this project. Currently I would like to use string_view, since it looks like a general solution for compile-time string with lots of constexpr functions, but I don't know which of the following designs looks better: Design A: template<typename KeyType, typename MappedType, typename EqualOp = StaticEqualOp<KeyType>, typename HashOp = StaticHashOp<KeyType>> class static_map; // StaticEqualOp: Specialize StaticEqualOp for those KeyTypes that // can construct string_view and use operator== of string_view, // otherwise we simply use operator== of KeyType // StaticHashOp: size_t operator()(const string_view&, const string_view&) // for types that can construct string_view Design B: We don't specialize any StaticEqualOp for const char*. Instead, make_static_map({{"abc", 1}}) returns static_map<string_view, int> instead of static_map<const char *, int>. Which one is better? Or is there any more feasible design? Thanks, -- --------------------------------- Vic Luo Shanghai Jiaotong University Key fingerprint 0x98809ca08bf5662a