【发布时间】:2012-10-21 10:50:42
【问题描述】:
以下代码用clang 3.1编译不上,使用libc++(不知道版本,目前Xcode自带的)。它适用于其他标准库。我的代码是否有错误,或者这是 libc++ 中的错误?
#include <map>
#include <string>
using namespace std;
struct A {
A(const map<int, A>& m) {}
};
struct B {
map<string, A> m;
};
我看到的错误在<utility>:
/usr/lib/c++/v1/utility:241:64: No member named 'value' in 'std::__1::is_nothrow_copy_constructible<A>'
我试图进一步隔离它,但这是我发现的最小示例。有趣的是,当我在第二张地图中将string 替换为int 时它可以工作(当我在第一张地图中将int 替换为string 时):
map<string, A> m; // Does not work
map<int, A> m; // Works
【问题讨论】:
-
@hvd XCode 4.5 附带的 Clang 版本将自己标识为
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn) -
呸。感谢那。我会删除我的评论,因为它没有帮助。我认为 Apple 在没有明确表示他们已经这样做的情况下偏离了 clang 版本号是一个错误。
-
我在这里遗漏了什么还是仅仅因为您的
A不是默认可构造的? -
添加
A() {}或/和A(const A&) {}不会使错误消失。正如我所说,它可以与 libstdc++(甚至是当前 debian 的 libc++)一起编译。 -
+1 完整的最小示例。 SSCCE.ORG