This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/24118] New: Access control bug for base class of templates


struct Base
{
  protected:
    typedef void (Base::*fnc)() const;
    void fnc_to_expose() const {}
};

template <typename T>
struct Derived : public Base
{
    fnc expose() { return &Base::fnc_to_expose; }
    fnc expose2() { return &Derived<T>::fnc_to_expose; }
};

void foo(void)
{
  Derived<int>  i;
  i.expose();
  i.expose2();
}

does accept i.expose() which is invalid as can be seen by either using
a specialized version of Derived or using a non-template Derived.  It
should tell us

 ex.cc: In member function 'void (Base::* Class::expose())()const':
 ex.cc:13: error: 'void Base::fnc_to_expose() const' is protected
 ex.cc:54: error: within this context

as it does for those alternatives.

-- 
           Summary: Access control bug for base class of templates
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: rguenth at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24118


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]