Comeau त्रुटियों के बिना यह संकलित (यहाँ मेरी कम से कम compilable परीक्षण का मामला है):
int main(void)
{
int x = 17;
return x ? throw "Something wrong happened" : 5;
}
जो काफी अच्छा सबूत है कि यह मानक द्वारा दी जाने वाली अनुमति है। तो यह तथ्य है कि एक त्रुटि के साथ साफ-सफाई में विफल होने के बजाय, एमएसवीसी दुर्घटनाग्रस्त हो जाता है।
इसके अलावा, यह कुलपति ++ 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
में तय से दूर है
स्रोत
2011-10-31 18:05:23
मानक, जब एक संकलक के अनुसार एक आंतरिक कंपाइलर त्रुटि के साथ दुर्घटनाओं (जो वीसी करता है, IIUC), तो यह संकलक में एक त्रुटि है। एक कंपाइलर को दोषपूर्ण कोड के लिए भी एक सार्थक संदेश उत्सर्जित करना है, क्रैश रिपोर्ट नहीं। – sbi
ध्यान रखें कि यह * सशर्त ऑपरेटर * है, जो * ए * टर्नरी ऑपरेटर होता है। – GManNickG
हाँ, भ्रमित हो गया जब "टर्नरी" कहीं भी कल्पना में नहीं था। –