2012-05-15 22 views
5

Trong gcc 4.2, công trình này:Xcode/LLVM bắt khoản không phù hợp với loại có nguồn gốc

#include <stdexcept> 
#include <iostream> 

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

Trong Xcode 4.3.2 (iOS với LLVM 3.1, -std = C++ 11), điều này không thành công với terminate called throwing an exception , không bao giờ đạt dòng 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); 
} 

Nhưng công trình này:

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

gì cho?

+0

Đi ra 'const' và cho chúng tôi biết những gì bạn nhận được. –

+0

@MarkRansom: Không thay đổi. Tôi đã thử '... catch (std :: exception ex)…' too; một lần nữa, không thay đổi. –

Trả lời

2

gcc là đúng:

15.3p3 Một handler là một trận đấu cho một đối tượng ngoại lệ kiểu E nếu

  • ... hoặc
  • handler là loại cvT hoặc cvT&T là một lớp học rõ ràng nào cơ sở của E, hoặc
  • ...

này nghe có vẻ giống như một lỗi xcode (và một cách đáng ngạc nhiên cơ bản!)

+0

Cảm ơn bạn đã chỉnh sửa @Heatsink. Vì vậy, bạn thực sự có thể đặt một danh sách trong một báo giá, và bây giờ tôi nghĩ rằng tôi thấy như thế nào. – aschepler

Các vấn đề liên quan