Best practices

template <typename T> struct AVLTree {}

I want to prevent AVLTree<T> from being instantiated when T is std::string (including const/reference variants like const std::string&).