Ideally I'd ask if you could 'simply' drop precpp20 (or even 23) support 😊 but if that is not feasible can you please use concepts (instead of SFINAE and old meta tricks) wherever possible or at least for detecting the presence of certain methods (like push_back) - with your current approach I got compilation errors w/ explicit object parameter and constructs like T{}.push_back() (as the T{} rvalue cannot bind to an lvalue reference like this T &).