One thing to keep in mind when implementing templated classes is the handling of dependent names.
Name lookup for non-dependent names is done before the template is instantiated, which can sometimes lead to surprising behaviour.
Compiler Explorer link: https://compiler-explorer.com/z/rz44PnPrz