Учитывая метапрограмму шаблона (TMP), компиляторы С++ производят статистику сборки, которая подсчитывает количество экземпляров классов? Или есть ли другой способ автоматически получить этот номер? Так, например, оберенный факториал
#include <iostream>
template<int N> struct fact { enum { value = N * fact<N-1>::value }; };
template<> struct fact<1> { enum { value = 1 }; };
int main()
{
const int x = fact<3>::value;
std::cout << x << "\n";
return 0;
}
Я хотел бы вернуть номер 3 (поскольку экземпляр факта < 3, fact < 2 & and fact < 1). Этот пример, если, конечно, тривиальный, но всякий раз, когда вы начинаете использовать, например, Boost.MPL, время компиляции действительно взорвалось, и я хотел бы знать, сколько из этого происходит из-за скрытых классов. Мой вопрос в первую очередь для Visual С++, но ответы на gcc также будут оценены.
EDIT: мой текущий очень хрупкий подход для Visual С++ добавляет компилятор с одного из файлов Stephan T. Lavavej /d1reportAllClassLayout и делает счетчик grep + слов в выходном файле, но он (a) увеличивает время компиляции и (b) регулярное выражение не может получить 100% правильно.