2017-08-01 39 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()构造。

相关问题