C++11 如果使用包含类的arg声明成员函数模板,则在Clang中使用不完整类型无效

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

我想用一个成员函数模板实现一个类似下面的类,该模板采用可调用类型F并将其应用于实例

这将在VisualStudio15中编译和运行,但由于错误而失败 [x86-64 clang 4.0.0]错误:不完整类型“Foo”的使用无效

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是的,谢谢。你想做一个我能接受的回答吗?出于某种原因,我认为这超出了我的范围。