2012-05-15 15 views
5

जीसीसी 4.2 में मिलान नहीं खंड, इस काम करता है:Xcode/LLVM पकड़ ली गई प्रकार

#include <stdexcept> 
#include <iostream> 

int main() { 
    try { 
     throw std::runtime_error("abc"); 
    } catch (const std::exception& ex) { 
     std::cout << ex.what(); 
    } 
} 

Xcode 4.3.2 में (आईओएस LLVM 3.1 के साथ, -std = C++ 11), इस terminate called throwing an exception के साथ विफल नहीं, कभी नहीं पहुँच रहा NSLog(…) लाइन:

#include <stdexcept> 

int main() { 
    try { 
     throw std::runtime_error("abc"); 
    } catch (const std::exception& ex) { 
     NSLog(@"%s", ex.what()); 
    } 

    return UIApplicationMain(argc, argv, nil, nil); 
} 

लेकिन यह काम करता है:

#include <stdexcept> 

int main() { 
    try { 
     throw std::runtime_error("abc"); 
    } catch (const std::runtime_error& ex) { 
     NSLog(@"%s", ex.what()); 
    } 

    return UIApplicationMain(argc, argv, nil, nil); 
} 

क्या देता है?

+0

'const' बाहर ले और हमें बताएं कि आपको क्या मिलता है। –

+0

@MarkRansom: कोई बदलाव नहीं। मैंने कोशिश की ... पकड़ो (std :: अपवाद पूर्व) ... 'भी; फिर, कोई बदलाव नहीं। –

उत्तर

2

जीसीसी सही है:

15.3p3 एक हैंडलर प्रकार E की एक अपवाद वस्तु अगर

  • ... या
  • हैंडलर की है के लिए कोई मिलान टाइप करें सीवीT या सीवीT& और TE का एक स्पष्ट सार्वजनिक आधार वर्ग, या

यह एक xcode बग की तरह लगता है है ... (और एक आश्चर्यजनक रूप से बुनियादी एक!)

+0

संपादन @Heatsink के लिए धन्यवाद। तो आप वास्तव में एक उद्धरण में एक सूची डाल सकते हैं, और अब मुझे लगता है कि मैं कैसे देखता हूं। – aschepler

संबंधित मुद्दे