Love birds! Don't make the trees feel lonely!
esv::end_with_star is a concept used to match a type which has a pointer star symbol at the end.
As some type might be a pointer but does not have a pointer star symbol, esv::end_with_star is used to distinguish them, esv::end_with_star concept guarantees a star symbol must exist at the end.
The following types satisfy concept esv::end_with_star :
const char * char * int * any_type any_qualifiers *
The following types do not satisfy concept esv::end_with_star :
const char * const char * const int * const chat (*)[16]
To match a type which has a star symbol before cv- qualifiers, you can use esv::remove_cvref_t on it, then use concept esv::end_with_star .
esv::end_with_star was designed for esv::str_size, but it can be used for general purpose.
#include <esvcpp/core.hpp> template <esv::end_with_star pointer_type> class fizz_box { }; int main() { fizz_box<const char *> f1; // OK // fizz_box<char (*) [16]> f2; // error }