https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94008

            Bug ID: 94008
           Summary: "use of deleted function" error when using
                    "std::unique_ptr", std::move() and lambda
           Product: gcc
           Version: 8.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: xxhdx1985126 at gmail dot com
  Target Milestone: ---

the following code will trigger a "use of deleted function" error when
compiling:

------------------------------------------
#include <memory>

template<typename Func>
void test_lambda(Func f)
{
}

int main()
{
  std::unique_ptr<int> test_uniq = std::make_unique<int>(0);
  test_lambda([test_uniq = test_uniq.get()] () mutable {
      test_lambda([test_uniq] {
          });
    });
  test_lambda([test_uniq = std::move(test_uniq)] {
      test_lambda([test_uniq = std::move(test_uniq)] {});
    });
}
------------------------------------------

the error:

test_unique_ptr_lambda.cpp: In lambda function:
test_unique_ptr_lambda.cpp:16:19: error: use of deleted function
‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with
_Tp = int; _Dp = std::default_delete<int>]’
       test_lambda([test_uniq = std::move(test_uniq)] {});
                   ^
In file included from /opt/rh/devtoolset-8/root/usr/include/c++/8/memory:80,
                 from test_unique_ptr_lambda.cpp:1:
/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/unique_ptr.h:394:7: note:
declared here
       unique_ptr(const unique_ptr&) = delete;
       ^~~~~~~~~~


system: CentOS 8
compile command: g++ -std=c++17 test_unique_ptr_lambda.cpp

Reply via email to