[Bug c++/82613] New: Cannot access private definitions in base clause of friend class template
fabian.loeschner at live dot de
gcc-bugzilla@gcc.gnu.org
Thu Oct 19 08:09:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82613
Bug ID: 82613
Summary: Cannot access private definitions in base clause of
friend class template
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: fabian.loeschner at live dot de
Target Milestone: ---
Affected versions: all up to 8.0.0 20171015
The following code:
struct Empty {};
template <typename T>
struct B;
struct A
{
friend struct B<A>;
private:
using BaseForB = Empty;
};
template <typename T>
struct B : T::BaseForB
{
};
int main()
{
B<A> test;
return 0;
}
leads to the error:
test.cpp: In instantiation of 'class B<A>':
test.cpp:21:7: required from here
test.cpp:15:8: error: 'using BaseForB = class Empty' is private within this
context
struct B : T::BaseForB
^
test.cpp:11:20: note: declared private here
using BaseForB = Empty;
^
According to cppreference this should be legal: "The friend itself can also
inherit from private and protected members of this class. (since C++11)".
Furthermore the code works when converting 'B' to a regular class without
template parameters.
More information about the Gcc-bugs
mailing list