用户来找我OS X上的编译问题:
http://fpaste.org/77628/39251593/
排除明显之后;使用gcc而不是clang和“正确”的标准库,很明显问题出在std :: enable_shared_from_this<>类声明的一部分
该类本身有
的声明class Expression : public std::enable_shared_from_this<Expression> {
// ...
};
一些调查显示这可能是Xcode / clang本身的一个问题: https://github.com/kripken/emscripten/issues/270
https://code.google.com/p/alembic/issues/detail?id=315
有人可以证实吗?或者,有没有办法解决这个问题?
编辑:有问题的代码不需要,所以删除了。使用特定提交更新链接(r1047)答案 0 :(得分:2)
我相信这是我遇到的libc ++中的一个错误。我不久前提交了一份错误报告(http://llvm.org/bugs/show_bug.cgi?id=18843)。
出现此问题是因为从shared_ptr
派生的const
个类的某个std::enable_shared_from_this
版本被分配了一个指向该类型的非const指针。在libstdc ++中,const
在weak_ptr
中分配给内部std::enable_shared_from_this
的函数内部被剥离,但这在libc ++中不会发生。以下代码显示了在当前libc ++下将导致此错误的示例:
struct A : std::enable_shared_from_this<A> {};
int main()
{
std::shared_ptr<A const> ptr( new A() );
}
您现在可以通过以下方式解决此问题:
std::shared_ptr<A const> ptr( std::const_pointer_cast<A const>( std::shared_ptr<A>( new A() ) ) );
new A()
只是您尝试进入shared_ptr
的指针。