SFINAE
型を代入した結果テンプレートが不正になっても、コンパイルを止めず、候補から静かに外すというC++の規則。
この規則はもともと、オーバーロード解決をまともに動かすために存在した。ところがほどなく、型を問い合わせる道具として使えることが発見された。ある性質を持つ型でしかインスタンス化できないテンプレートを書き、生き残った一つのオーバーロードをコンパイラに選ばせるのだ。ここからstd::enable_ifや型特性ライブラリ全体が生まれ、型がbegin()メソッドを持つかどうかをコンパイル時に判定するコードが世代を成した。確かに動いたが、書き方は遠回しで、一つ間違えると「合う候補がない」という理由の長大なエラーが画面を埋めた。C++20ではコンセプトとrequiresがこの技法をほぼ置き換え、同じことを直接書けるようになった。