C++ テンプレート
C++ のジェネリックプログラミングの仕組み。型をパラメータ化してコードを書く:template<typename T> class Vector { T data; ... };。1990年、Bjarne Stroustrup。
エラーメッセージの複雑さは悪名高い(「テンプレートエラーの嘔吐」)。SFINAE(Substitution Failure Is Not An Error)は、部分特殊化のための小技である。テンプレートメタプログラミングはコンパイル時に値を計算する手法で、古典的な例が Factorial<5>::value。C++20 のコンセプトはテンプレートの制約を標準化し、エラーメッセージをずっと読みやすくした。
実装は単相化(インスタンス化された型ごとに別のコードを生成する)に基づくため、実行時は速いが、バイナリは大きくなる。STL(標準テンプレートライブラリ)は全面的にテンプレートで作られており、std::vector、std::map、<algorithm> がその例だ。