Aşağıdaki kod g ++ (çeşitli versiyonları) üzerinde ince derler ama ++ clang üzerinde başarısız - sistemimde libc'nin ++ ile 3.4:std :: map default constructor açık mı?
#include <map>
#include <string>
std::map<std::string, std::string> f() {
return {};
}
int main() {
auto m = f();
}
clang aşağıdaki sorunu işaretler: Nitekim
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())
^
, içerme dosyası kurucuyu explicit
olarak bildirir. Ancak C++ 11 taslak standardında böyle işaretlenmemiş. Bu bir clang ++/libC++ hatası mı? İlgili bir hata raporu bulamadım.
görünüyor: http://en.cppreference.com/w/cpp/container/map/map –
Geçerli çalışma taslağında [n4659] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf#subsubsection.26.4.4.1) ayrıca 'açık' olarak işaretlenmiştir '. –
@KonradRudolph Örneğinizde ve hata iletisinde, kopya kurucusunu çağırmıyorsunuz, sorun bundan önce geliyor - varsayılan olarak bir "std :: map" oluşturmaya çalışıyorsunuz. –