N3337, 18.10 Other runtime support p9
All signal handlers shall have C linkage.
全てのシグナルハンドラは、Cリンケージを持たなければならない。
とC++側の規格で決まってるようなので、シグナルハンドラはCリンケージで書きましょう。
なんでかはよくわかりません。
#include <cstdio> #include <cstdlib> #include <csignal> extern "C" void handler(int sig) { std::printf("signal\n"); std::exit(1); } int main() { std::signal(SIGINT, handler); for (;;) { std::printf("wait\n"); } }