テンプレート メタプログラム (TMP) が与えられた場合、C++ コンパイラは、インスタンス化されたクラスの数をカウントするビルド統計を生成しますか? または、この番号を自動的に取得する他の方法はありますか? たとえば、偏在階乗の場合
#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 を取得したいと思います (fact<3>、fact<2>、および fact<1> がインスタンス化されているため)。もちろん、この例は些細なことですが、Boost.MPL などを使い始めると、コンパイル時間が本当に爆発的に増加します。隠しクラスのインスタンス化がどの程度の原因なのかを知りたいです。私の質問は主に Visual C++ に関するものですが、gcc に関する回答もいただければ幸いです。
編集: Visual C++ に対する私の現在の非常に脆弱なアプローチは、Stephan T. Lavavej のビデオ/d1reportAllClassLayout の 1 つからコンパイル スイッチを追加し、出力ファイルで grep + ワード カウントを実行することですが、(a) コンパイル時間が大幅に増加し、(b)正規表現を 100% 正しくすることは困難です。