2014-02-16 34 views
2

用戶已經到了我編譯的問題在OS X:編譯錯誤使用的std :: enable_shared_from_this <>在OS X

http://fpaste.org/77628/39251593/

排除了明顯的後;使用gcc而不是鐺,和「正確」的標準庫,很明顯,這個問題是用的std :: enable_shared_from_this <>類聲明

類本身的一部分,有

class Expression : public std::enable_shared_from_this<Expression> { 
// ... 
}; 
聲明

一些調查表明,這可能是在Xcode /鐺本身就是一個問題: https://github.com/kripken/emscripten/issues/270

https://code.google.com/p/alembic/issues/detail?id=315

可有人ç確認這一點?或者,有沒有辦法解決這個問題?

代碼位於here與位於here

編輯有問題的文件:有問題的代碼是不需要的,所以被刪除。鏈接更新了特定的提交(r1047)

回答

1

我相信這是我遇到的libC++中的一個錯誤。我剛纔提交了一個錯誤報告(http://llvm.org/bugs/show_bug.cgi?id=18843)。

問題出現是因爲shared_ptr到從std::enable_shared_from_this派生的類的某個const版本被分配了一個非const指針指向該類型。在libstdC++中,此const在執行內部weak_ptrstd::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

+0

似乎是這種情況。歡呼,以確認我懷疑 – LordAro

相關問題