https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71568
Bug ID: 71568
Summary: Inexplicable error: "X is inaccessible within this
context" for a public member
Product: gcc
Version: 6.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: richardg.work at gmail dot com
Target Milestone: ---
Created attachment 38717
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38717&action=edit
Demonstration of the error & a possible workaround
The attached 90 line test.cpp fails to compile with an inexplicable error
message : "X is inaccessible within this context". The X is clearly a public
member, so this is not a C++ private memeber issue. Critically, the same code
compiles without issue on the clang compiler (clang 3.7.1)
Note : Compile test.cpp with -std=c++14.
I've seen this error in unrelated template code before, but this time I've been
able to simplify it to a 90 line repro.
Godbolt demonstrating the error : https://godbolt.org/g/Z4hDez
/tmp/gcc-explorer-compiler116517-85-12v5300/example.cpp: In instantiation of
'struct has_nlog_custom, void>':
35 : required by substitution of 'template typename
std::enable_if::value, void>::type write(NLogger&, const
Head&) [with Head = std::tuple]'
70 : required from 'typename std::enable_if<(!
has_nlog_custom::value)>::type log(NLogger&, const Head&) [with Head =
LogStructN; typename std::enable_if<(! has_nlog_custom::value)>::type =
void]'
88 : required from here
21 : error: 'void Foo0::nlog_custom(NLogger&) const' is inaccessible within
this context
struct has_nlog_custom> : std::true_type
{};
^~
78 : note: declared here
void nlog_custom(NLogger & nl) const {}
^~~
21 : error: 'void Foo0::nlog_custom(NLogger&) const' is inaccessible within
this context
struct has_nlog_custom> : std::true_type
{};
^~
78 : note: declared here
void nlog_custom(NLogger & nl) const {}
^~~
Compilation failed
I have a workaround, changing the #if between 0 & 1 toggles the error. But I
don't believe that I've found the root cause of the issue. It would be very
helpful to either diagnose this as a gcc bug, or have gcc provide more
diagnostic information on the root cause.
Thanks