[Bug c++/79661] New: Bogus "destructor is private within this context" only in C++17 mode
sbergman at redhat dot com
gcc-bugzilla@gcc.gnu.org
Tue Feb 21 11:43:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79661
Bug ID: 79661
Summary: Bogus "destructor is private within this context" only
in C++17 mode
Product: gcc
Version: 7.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sbergman at redhat dot com
Target Milestone: ---
At least with a recent GCC trunk build:
> $ g++ --version
> g++ (GCC) 7.0.1 20170220 (experimental)
> Copyright (C) 2017 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
> $ cat test.cc
> template<typename T> struct R { R(T *); };
> struct S {
> S(int);
> private:
> ~S();
> };
> void f() { R<S>(new S(0)); }
>
> $ g++ -std=c++17 -fsyntax-only test.cc
> test.cc: In function ‘void f()’:
> test.cc:7:24: error: ‘S::~S()’ is private within this context
> void f() { R<S>(new S(0)); }
> ^
> test.cc:5:2: note: declared private here
> ~S();
> ^
Compilation succeeds when dropping the S constructor's int parameter (or even
merely giving it a default value and removing the argument from 'new S()'), or
when dropping the R<S>(...) wrapper, or when compiling as -std=c++14, or when
compiling with GCC 6.3.1 (gcc-c++-6.3.1-1.fc25.x86_64). So I assume this is a
bug rather than an actual C++17 requirement that I'm not aware of.
(The used GCC trunk version already includes the fix for somewhat-similar bug
78469.)
More information about the Gcc-bugs
mailing list