[Bug c++/85555] New: Use of concepts gives access to private members.
tobias.bruell at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sat Apr 28 07:41:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85555
Bug ID: 85555
Summary: Use of concepts gives access to private members.
Product: gcc
Version: 7.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: tobias.bruell at gmail dot com
Target Milestone: ---
Created attachment 44033
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44033&action=edit
Reproducer
In the following condensed example the unrelated use of concepts seems to be
giving access to the private non-static member functions of a class.
Compile with:
g++-7.3 -std=c++17 -fconcepts gcc_bug.cpp
----------------------------------------------------------------
/*
* Uncommenting the following line and commenting the line after that
* makes the program fail to compile (as it should).
*/
//template<typename Target>
template<typename Target, typename... Ts>
concept bool has_resize ()
{
return requires (Target tgt)
{
{ tgt.resize () };
};
};
template<typename Target>
void resize (Target tgt)
{
if constexpr (has_resize<Target> ())
{
tgt.resize ();
}
}
class MyClass
{
private:
int foo (int i)
{
return i * 2;
}
};
int main ()
{
return MyClass {}.foo (7);
}
More information about the Gcc-bugs
mailing list