Не существует переносного способа нарушения сегментации или другой подобной ошибки.
Компиляторы могут и предполагают, что неопределенное поведение никогда не происходит. Если они обнаруживают UB в определенной ветви кода, они имеют полное право оптимизировать всю ветвь из существования.
if (x == 5)
{
std::cout << "Gonna crash";
*(int*)0 = 42;
}
Компилятор может перевести этот блок кода на no-op.
raise(SIGSEGV)
может быть или не быть причиной фактического нарушения, но это единственный переносной способ заставить программу вести себя , как если бы произошло нарушение.
Если вы скрываете один символ typedef в другом месте (возможно, параметр шаблона), вы можете сохранить 2 символа со своего пути. – o11c