【问题标题】:Invalid use of incomplete type in Clang if I declare member function template with arg of containing class如果我使用包含类的 arg 声明成员函数模板,则在 Clang 中使用不完整类型无效
【发布时间】: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 是的,谢谢。你想做出一个我能接受的答案吗?
  • 出于某种原因,我认为此时这超出了范围。

标签: c++11 clang


【解决方案1】:

尝试decltype(func(*this)) 而不是decltype( func( Foo() ) )

我不确定这是否符合标准,但 clang 显然不喜欢在 Foo 的定义中使用 Foo() 构造函数。

【讨论】:

    猜你喜欢
    • 2019-12-23
    • 2019-09-25
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多