読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

可變長引數と非POD

かういふ可變長引數を取る函數があるとします。所謂printf系男子ですね。

void foo(const char *f, ...);

で、これにかういふ構造體を用意します。コンストラクタを自分で定義してゐるので非PODです。

struct hoge {
  hoge() {}

  operator int () const {
    return 0;
  }
};

intに變換される演算子を用意したのでつい可變長引數の部分に突つ込んでしまつたのですが、

int main() {
  hoge h;
  foo("%d\n", h);
  return 0;
}

何やら警告が出ます。

cannot pass objects of non-POD type `struct hoge' through `...'; call will abort at runtime

どうやら非PODは可變長引數に突つ込んだらあぼーとするよみたいな脅しが出てゐる樣です。またまたコンパイラさん脅しがキツイでつせと思つて吐かれたバイナリを逆汗してみたところ(最近は諸事情によりMIPSつぽいのが多めです)、

0040002c <main>:
  40002c:	0000000d 	break

分らされました。本當にbreakするんですね...。