Forcing PrehashedString to only accept compile time string literals

Note the template trick in the constructor. This forces the PrehashedString to only accept compile time string literals. The reason for this is that the PrehashedString class does not own the const char* ptr and therefore we may only use it with string literals created at compile time:

// This compiles 
auto prehashed_string = PrehashedString{"my_string"}; 
 
// This does not compile// The prehashed_string object would be broken if the str is modified 
auto str = std::string{"my_string"}; 
auto prehashed_string = PrehashedString{str.c_str()};  
 
// This does not compile. // The prehashed_string object would be broken if the strptr is deleted 
auto* strptr = new char[5]; auto prehashed_string ...

Get C++ High Performance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.