【发布时间】:2017-08-01 21:26:45
【问题描述】:
我想用一个成员函数模板实现一个像下面这样的类,该模板采用可调用类型 F 并将其应用于实例。
这可以在 Visual Studio 15 中编译和运行,但在 clang 中失败并出现错误 [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;
}
有没有办法让它在 C++11 的 Clang 下工作? 根据标准,哪个编译器更正确?
【问题讨论】:
-
试试
decltype(func(*this))而不是decltype( func( Foo() ) ) -
@0x5453 是的,谢谢。你想做出一个我能接受的答案吗?
-
出于某种原因,我认为此时这超出了范围。