2017-08-01 40 views
0

我想用一個成員函數模板實現一個類,該成員函數模板採用可調用類型F並將其應用於實例。如果我聲明包含類的arg的成員函數模板,在Clang中使用的不完整類型無效使用

這編譯並在Visual Studio 15中運行,但在鐺與錯誤失敗 [X86-64鐺4.0.0]錯誤:無效的使用不完全類型的「富」

struct Foo 
{ 
    template<typename F> 
    auto applyFunctionToMe(F&& func)->decltype(func(Foo())) 
    { 
     return func(*this); 
    } 

    int contents; 
}; 

int main() 
{ 
    Foo bar; 
    auto result = bar.applyFunctionToMe([](const Foo& f){ return f.contents;}); 
    return result; 
} 

是否有辦法讓它在C++ 11中的Clang下工作? 哪個編譯器根據標準更正確?

+0

嘗試'decltype(func(* this))'而不是'decltype(func(Foo()))' – 0x5453

+0

@ 0x5453是的,謝謝。你想做出我能接受的答案嗎? –

+0

出於某種原因,我認爲這在這一點上超出了範圍。 –

回答

1

嘗試的decltype(func(*this))代替decltype(func(Foo()))

我不知道這是否是符合標準的,但顯然鏗鏘不喜歡使用的Foo定義範圍內的Foo()構造。

相關問題