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

            Bug ID: 65623
           Summary: Incorrect location of error messages on calling copy
                    constructor of unique_ptr
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: chengniansun at gmail dot com

When I was compiling a large class file, gcc emit an error that I called the
copy constructor of unique_ptr. It took me a while to figure out the cause of
the error. I find that clang pinpoints this error.  

I think this error message can be improved with a precise location of the
error. The current location is just the end of the initializer list.  

$: cat t.cc 
#include <memory>
using namespace std;

class A {
  const int a;
  const unique_ptr<A> b;
  const int c;
public:
  A(const A& copy) : a(copy.a), 
    b(copy.b), 
    c(copy.c) {
  }
};


$: g++-4.9 -std=c++11 -c t.cc 
t.cc: In copy constructor ‘A::A(const A&)’:
t.cc:11:13: error: use of deleted function ‘std::unique_ptr<_Tp,
_Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = A; _Dp =
std::default_delete<A>]’
     c(copy.c) {
             ^
In file included from /usr/local/gcc-4.9.0/include/c++/4.9.0/memory:81:0,
                 from t.cc:1:
/usr/local/gcc-4.9.0/include/c++/4.9.0/bits/unique_ptr.h:356:7: note: declared
here
       unique_ptr(const unique_ptr&) = delete;
       ^



$: clang-trunk -std=c++11 -c t.cc 
t.cc:10:5: error: call to deleted constructor of 'const unique_ptr<A>'
    b(copy.b), 
    ^ ~~~~~~
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/unique_ptr.h:273:7:
note: 'unique_ptr' has been explicitly marked deleted here
      unique_ptr(const unique_ptr&) = delete;
      ^
1 error generated.
$:

Reply via email to