如果我声明包含类的arg的成员函数模板,在Clang中使用的不完整类型无效使用
问题描述:
我想用一个成员函数模板实现一个类,该成员函数模板采用可调用类型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下工作? 哪个编译器根据标准更正确?
答
尝试的decltype(func(*this))
代替decltype(func(Foo()))
我不知道这是否是符合标准的,但显然铿锵不喜欢使用的Foo
定义范围内的Foo()
构造。
尝试'decltype(func(* this))'而不是'decltype(func(Foo()))' – 0x5453
@ 0x5453是的,谢谢。你想做出我能接受的答案吗? –
出于某种原因,我认为这在这一点上超出了范围。 –