Các mã sau hoạt động tốt trên Linux nhưng ném một ngoại lệ trên OS X 10.7:miền địa phương Setting trên OS X treo
#include <iostream>
#include <locale>
#include <stdexcept>
int main() try {
std::locale::global(std::locale(""));
std::cout << "Using locale: " << std::locale().name() << "\n";
}
catch (std::runtime_error const& e) {
std::cout << e.what() << "\n";
return 1;
}
Kết quả trên OS X là:
locale::facet::_S_create_c_locale
Tên không hợp lệ
Tuy nhiên, tiêu chuẩn nói rõ ràng rằng
Tập hợp các giá trị đối số chuỗi hợp lệ là
"C"
,""
và mọi giá trị được triển khai.
Vì vậy, bất kỳ điều gì gây ra hành vi ở trên đều vi phạm tiêu chuẩn.
Trình biên dịch được sử dụng là clang ++ 3.1 (thẻ/Apple/clang-318.0.58); Tôi cũng đã thử nó với GCC 4.7, cài đặt thông qua Homebrew, với kết quả tương tự.
Người khác có thể xác thực vấn đề này không? Điều gì gây ra nó? Tôi có làm gì sai không? Đây có phải là lỗi trong OS X không?
(Có lẽ relates to another xlocale
problem này nhưng lỗi là thực sự hoàn toàn khác nhau.)
Tôi nghĩ rằng đây là (gần như) một bản sao của [câu hỏi này] (http://stackoverflow.com/questions/1745045/stdlocale-breakage-on-macos-10-6-with-lang-en-us- utf-8) ... –
@EitanT Tốt, đó là (một * chính xác * trùng lặp)! Cảm ơn. –
Tôi không nghĩ bạn đang sử dụng xlocale. Tôi tin rằng bạn đang gặp vấn đề với libstdC++, sử dụng một thư viện hỗ trợ ngôn ngữ khác (có vẻ như không được hỗ trợ trên OS X, như câu hỏi liên kết EitanT với các trạng thái). Tôi nghĩ nếu bạn chuyển sang libC++, chương trình của bạn sẽ hoạt động. Mặc dù như chi tiết câu hỏi của tôi, có vấn đề với một số miền địa phương trong libC++, vì lỗi trong xlocale. – bames53