代码之家  ›  专栏  ›  技术社区  ›  Vahagn

向泛型lambda传递参数时复制构造函数不正确

  •  1
  • Vahagn  · 技术社区  · 6 年前

    考虑一下这段代码:

    template < auto What >
    constexpr auto Identity = [](auto&&...) { return What; };
    
    struct Ban
    {
      Ban() = default;
      Ban(const Ban&  ban) = delete;
      Ban(      Ban&& ban) = delete;
    };
    
    int main()
    { 
      Ban ban;
      Identity<false>(10,ban);
    
      return 0;
    }
    

    godbolt.org 具有 gcc-7.3 当它试图复制 Identity gcc ?

    合同通用条款 如果第二个参数是临时的或只有一个参数,则不抱怨。当定义 是与 (...) 而不是 (auto&&...) .

    1 回复  |  直到 6 年前
        1
  •  3
  •   T.C. Yksisarvinen    6 年前

    前半部分是对 auto&&... clang vs gcc - empty generic lambda variadic argument pack ; Should non-capturing generic lambdas decay to function pointers?

    预计下半年。超越C型 ... variadics创建了一个副本,而您删除了副本构造函数。