operator<<
関数ポインタを受け入れて呼び出すオーバーロードがあります。魔法は関係ありません。
あなたのような単純なマニピュレータの処理は、標準のセクション27.7.3.6.3で説明されています。
basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& (*pf) basic_ostream<charT,traits>&))
- 効果:なし。フォーマットされた出力関数として動作しません(27.7.3.6.1で説明されています)。
- 戻り値:
pf(*this)
。
basic_ostream<charT,traits>& operator<<(basic_ios<charT,traits>& (*pf) basic_ios<charT,traits>&))
- 効果:呼び出し
pf(*this)
。このインサーターは、フォーマットされた出力関数としては動作しません(27.7.3.6.1で説明されています)。
- 戻り値:
*this
。
basic_ostream<charT,traits>& operator<<(ios_base& (*pf)(ios_base&))
- 効果:呼び出し
pf(*this)
。このインサーターは、フォーマットされた出力関数としては動作しません(27.7.3.6.1で説明されています)。
- 戻り値:
*this
。
より複雑なマニピュレータ(パラメータを受け入れて状態を保持する)は、独自のoperator<<
オーバーロードを持つファンクタオブジェクトを返すことによって実装されます。