Предположим, я пишу шаблон библиотеку, состоящую из шаблона функции
template<T> void f(T);
с требованием, чтобы он работал с предопределенным набором классов A, B, C и D, например, должно компилироваться следующее:
template<> void f(A);
template<> void f(B);
template<> void f(C);
template<> void f(D);
Какую инфраструктуру тестирования я могу использовать для написания тестовых случаев, которые фиксируют это требование во время выполнения, вместо того, чтобы сбоить при компиляции кода теста? Другими словами, я хотел бы, чтобы инфраструктура создавала экземпляры шаблонов в runtime и создавала отчетливо отформатированный отчет об ошибках, если их подмножество не удается.
Я знаю, что могу вообще отказаться от тестирования фреймворков и просто написать простой cc-файл, содержащий 4 строки выше. Но я надеялся, что смогу включить это требование в обычные стандартные тестовые наборы для генерации отчетов о состоянии тестов. Например,
test f works with A: passed.
test f works with B: passed.
test f works with C: failed! Cannot cast type C!
test f works with D: passed.
3 of 4 tests passed.
1 of 4 tests failed.