はじめに これはC++ Advent Calendar 2017の25日目の記事です。 皆さん、C++は好きですか? 僕は好きではありません。 愛 し て ま す ! C++魔術回路って? C++ってちょっと凝ったことするときにどういう風にすれば実現できるのか。 そういった黒魔術を書くときに使うテクニックを僕は C++魔術回路 と呼んでます。 まあ、普段使いできる程度に簡単なテクニックだと思います。 オーバーロード魔術回路 基礎テクニック。 テンプレートに型制約をもたせ、またそれを利用しオーバーロードを呼び分ける。 ところでオーバーロードってなんかカッコイイ響きだよねぇ。 SFINAE 特定の操作が可能な型を引数にとるということが可能である。C++11からの仕様。 テンプレートが実体化に失敗してもエラーにならず別のオーバーロードを探してくれる仕様になっており、これを利用してオーバーロード解