シグナルハンドラはCリンケージ

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");
    }
}