Các mã sau biên dịch tốt trên g ++ (phiên bản khác nhau) nhưng không thành công trên kêu vang ++ - 3.4 với libC++ trên hệ thống của tôi:Có phải std :: constructor mặc định bản đồ rõ ràng không?
#include <map>
#include <string>
std::map<std::string, std::string> f() {
return {};
}
int main() {
auto m = f();
}
kêu vang đánh dấu sự vấn đề sau đây:
x.cpp:6:12: error: chosen constructor is explicit in copy-initialization
return {};
^~
/usr/local/Cellar/llvm34/3.4.2/lib/llvm-3.4/bin/../include/c++/v1/map:838:14: note: constructor declared here
explicit map(const key_compare& __comp = key_compare())
^
Trên thực tế, bao gồm tập tin khai báo hàm tạo là explicit
. Nhưng nó không được đánh dấu như vậy trong tiêu chuẩn dự thảo C++ 11 của tôi. Đây có phải là lỗi trong clang ++/libC++ không? Tôi không thể tìm thấy báo cáo lỗi có liên quan.
Có vẻ như nó là 'explicit' sau khi tất cả (ít nhất là cho đến khi C++ 14): http://en.cppreference.com/w/cpp/container/map/map –
Trong bản nháp làm việc hiện tại [n4659] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf#subsubsection.26.4.4.1) nó cũng được đánh dấu là 'tường minh '. –
@KonradRudolph Trong ví dụ của bạn và thông báo lỗi, bạn không gọi trình tạo bản sao, vấn đề xuất hiện trước đó - khi bạn đang cố gắng xây dựng mặc định một 'std :: map'. –