男に二言は無い的マクロ

最初だけ特別な評価をして,以降は別の評価を繰り返すマクロを考えていた.結果,boost::preprocessorがincludeディレクティブを必要とする理由の本質を何となく悟る.っていうかそんなこと悟ってどーする>俺

// only_once_first_state.hpp
#undef ONLY_ONCE
#define ONLY_ONCE "only_once_second_state.hpp"
std::cout << "2度目は無いと思え!" << std::endl;
// only_once_second_state.hpp
std::cout << "2度目は無いと言っただろっ!" << std::endl;
// main.cpp
#include <iostream>
#define ONLY_ONCE "only_once_first_state.hpp"

int main()
{
#include ONLY_ONCE
#include ONLY_ONCE
#include ONLY_ONCE
#include ONLY_ONCE

  return 0;
}

マクロに状態を持たせるためにヘッダファイルを使っているという解釈でよかとですか?っていうか誰だよ,こんな変態的なこと思いついたの・・・.