上記の階乗の例はコンパイル時の最適化の一例であり、プログラム内で必要とされる階乗の値を予め計算して、定数としてコード内に組み込んでコンパイルを行う。これは実行時の性能とメモリ使用量の両面で効果がある。しかし、これはそれほど大きな最適化ではない。もっと重要なコンパイル時の最適化として、テンプレートメタプログラミングを使ったコンパイル時のループ展開がある。ここでは n 次元のベクトルクラスの作成を例として示す（n はコンパイル時に分かっている）。n 次元ベクトルではループ展開によって性能が大きく改善される。ここでは加算演算子を例として示す。template<int dimension>Vector<dimension>& Vector<dimension>::operator+=(const Vector<dimension>& rhs){    for (int i = 0; i < dimension; ++i)        value[i] += rhs.value[i];    return *this;}コンパイラがこのテンプレート関数をインスタンス化すると、次のようなコードが生成される:template<>Vector<2>& Vector<2>::operator+=(const Vector<2>& rhs){    value[0] += rhs.value[0];    value[1] += rhs.value[1];    return *this;}コンパイラは、テンプレートのパラメータ dimension がコンパイル時に定数なので、for ループをコンパイル時に展開できる。この手法の具体的実装例がBoost C++ Library等にある。
「コンパイル時のプログラミング」とはどういう意味かを示すため、階乗関数の例を示す。以下はテンプレートを使わない場合のC++のコードである:int factorial(int n){    if (n == 0)       return 1;    return n * factorial(n - 1);}void foo(){    int x = factorial(4); // == (4 * 3 * 2 * 1) == 24    int y = factorial(0); // == 0! == 1}このコードは 4 と 0 の階乗を求めている。テンプレートメタプログラミングとテンプレートの特殊化を再帰のために使って階乗の計算を実装すると、実行時に階乗の計算をせずにコンパイル時に計算を行うことができる:template <int N>struct Factorial{    enum { value = N * Factorial<N - 1>::value };};template <>struct Factorial<0>{    enum { value = 1 };};// Factorial<4>::value == 24// Factorial<0>::value == 1void foo(){    int x = Factorial<4>::value; // == 24    int y = Factorial<0>::value; // == 1}このコードは 4 と 0 の階乗をコンパイル時に計算し、その結果を定数のように扱う。これら2種類のバージョンはどちらもプログラムの機能という意味では同じであるが、前者は階乗をプログラム実行時に計算しているのに対して、後者はそれをコンパイル時に計算する。しかし、このようにテンプレートを使うには、テンプレートのパラメータの値がコンパイル時に判っていなければならず、Factorial<X>::value は X がコンパイル時に決まっている場合にしか使えない。換言すれば、X はコンパイル時定数（リテラルや sizeof など）の呼び出し結果でなければならない。
テンプレートメタプログラミングの文法はそのプログラミング言語本来のそれとだいぶ異なることが多いが、それでもテンプレートを使うのには理由がある。理由のひとつとしてジェネリックプログラミングの実装をするためということが挙げあられる（似たようなコードをいくつも書かないようにする）。また、コンパイル時のコードの最適化の利点を最大限生かすためという理由もある。通常では最適化されない部分もテンプレートを使っていると最適化される場合がある。
精神疾患は人生の早期に発症する。50パーセンタイル(50パーセンタイルは中央値を表す)が14歳までに発症、75パーセンタイルが24歳までに発症している。また、26歳時点でいずれかの精神障害を持つ者の1/2が15歳までに、3/4が18歳までに、何らかの精神障害の診断を受けていた。子どもの精神疾患は必ずしも成人と同様の症状が現れる訳ではなく、その診断は成人よりも困難である。ことに、双極性障害（躁うつ病）はうつ病と非常に誤診されやすい。25歳未満の若年発症のうつ病は双極性障害であるリスクが高い(若年発症の大うつ病は40％以上が後に躁転(そうてん)する)。軽度、短期であっても過去に躁(そう)状態のあった場合、過眠、過食などの双極性障害に特徴的な症状がある場合、または双極性障害の家族歴がある場合には、必ず医師に申告しなければならない。うつ病と双極性障害では治療法が全く異なるためである。双極性障害はうつ病よりも自殺率が高く、アルコール依存症や薬物乱用など無軌道な行動とも結びつきやすい。うつ病との鑑別は極めて重要である。双極スペクトラム障害の生涯有病率は2.7-7.8％であり、軽視できる数値ではない。重い疲労感が長期にわたって続いているにもかかわらず、精神疾患を含め、他の疾病の可能性がすべて否定された場合、慢性疲労症候群(筋痛性脳脊髄炎)と診断される可能性がある。2009年の1年間に国立国際医療研究センター国府台病院児童精神科を受診した初診患児756名のうち、不登校を主訴の一つとしている患児227名の診断名(主診断のみ)は、不安障害23％、気分障害19％、広汎性発達障害(PDD)19％、適応障害11％、身体表現性障害8％、ADHD(注意欠如・多動性障害)5％、破壊性行動障害4％、その他の障害11％であった。不安障害(パニック障害、社交不安障害等)と気分障害(うつ病、双極性障害等)という典型的な精神疾患が全体の4割以上を占める。また、発達障害(PDD, AD/HD等)も約1/4に見られる。ただし、この統計の対象は児童精神科を受診した児童のみである点に注意する必要がある。また、児童が複数の精神疾患を発症している場合の重複診断は集計されていない。