or just a regular function and a hope that anything wrong will be caught by the compiler:
template<typename T, typename U>
void my_func(std::vector<T>* vec) {
// use my_data_container<U> somewhere and hope things blow up if something is wrong
// Not 100% sure this is allowed, but something similar should be at least
}
Without concepts, you're left with SINFAE:
or just a regular function and a hope that anything wrong will be caught by the compiler: