C++11 如果使用包含类的arg声明成员函数模板,则在Clang中使用不完整类型无效
我想用一个成员函数模板实现一个类似下面的类,该模板采用可调用类型F并将其应用于实例 这将在VisualStudio15中编译和运行,但由于错误而失败 [x86-64 clang 4.0.0]错误:不完整类型“Foo”的使用无效C++11 如果使用包含类的arg声明成员函数模板,则在Clang中使用不完整类型无效,c++11,clang,C++11,Clang,我想用一个成员函数模板实现一个类似下面的类,该模板采用可调用类型F并将其应用于实例 这将在VisualStudio15中编译和运行,但由于错误而失败 [x86-64 clang 4.0.0]错误:不完整类型“Foo”的使用无效 struct Foo { template<typename F> auto applyFunctionToMe(F&& func)->decltype( func( Foo() ) ) { return f
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;
}
structfoo
{
模板
自动应用函数集(F&&func)->decltype(func(Foo()))
{
return func(*this);
}
int内容;
};
int main()
{
富吧;
自动结果=bar.applyFunctionToMe([](const Foo&f){return f.contents;});
返回结果;
}
在C++11中,有没有办法让它在叮当声下工作?
根据标准,哪个编译器更正确?尝试decltype(func(*this))
而不是decltype(func(Foo())
我不确定这是否符合标准,但clang显然不喜欢在
Foo
的定义中使用Foo()
构造函数,尝试decltype(func(*this))
而不是decltype(func(Foo())
@0x5453是的,谢谢。你想做一个我能接受的回答吗?出于某种原因,我认为这超出了我的范围。