У меня есть дополнительное предложение. Помимо модульного тестирования каждого шаблона, изучите методы, которые помогут ограничить потенциально обширную вселенную аргументов шаблона, которые пользователи вашей библиотеки могут попытаться перейти к вашим шаблонам.
Например: скажем, что вы тестируете свои шаблоны только с использованием аргументов типа "string" и "char". У вас нет доказательств того, что другие аргументы типа будут проблематичными для этого конкретного шаблона, но по той или иной причине вы «подозреваете», что другие непроверенные аргументы типа будут проблемными.
В таком случае, как в приведенном выше примере, это не обязательно означает, что вы должны тщательно проверить аргументы других типов. Вместо этого у вас есть случай, который может подразумевать, что вы должны использовать некоторые методы метапрограммирования шаблонов времени компиляции, чтобы гарантировать, что ваш шаблон никогда не используется с другими аргументами, кроме «string» и «char».
Один ресурс:
Современный дизайн C ++ - Андрей Александреску
Очень рано в этой книге автор приводит такие примеры:
как создать шаблон, который будет самодействовать, чтобы его первый тип arg был меньшего типа, чем второй тип arg
как определить конвертируемость и наследование во время компиляции
«Современный дизайн C ++» (несмотря на его довольно широкое / расплывчатое название) - это довольно продвинутое исследование методов программирования шаблонов.