Comeau компилирует его без ошибок (вот мой минимальный компилируемый тестовый пример):
int main(void)
{
int x = 17;
return x ? throw "Something wrong happened" : 5;
}
, что является довольно хорошим доказательством того, что это разрешено стандартом.Таков тот факт, что MSVC аварийно завершает работу, а не завершается с ошибкой.
Кроме того, похоже, что это исправлено в VC ++ 2010
R:\>cl ternarythrowtest.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
ternarythrowtest.cpp
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:ternarythrowtest.exe
ternarythrowtest.obj
и версии x64:
R:\>cl ternarythrowtest.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
ternarythrowtest.cpp
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:ternarythrowtest.exe
ternarythrowtest.obj
Обновите ваш компилятор, если это возможно, это далеко не единственная ошибка, исправленная в 2010 году.