Jeśli wiesz, czego oczekujesz od wartości wrzucanych w szablony, możesz je sprawdzić w szablonie na przykład przez static_assert. Co do typów, można niby nie pozwolić na samo stworzenie instancji szablonu przez bawienie się z częściowymi specjalizacjami lub SFINAE, ale IMO za dużo z tym zachodu.
(choć nie do końca rozumiem obaw o błędy, błąd szablonu pewnie zauważysz po minucie podczas pierwszej rekomplilacji, a jeśli szablon jest na tyle specyficzny że musisz do niego wrzucać typy o mocno określonych właśniwościach, to może więcej sensu by tam miało dziedziczenie?)