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

            Bug ID: 60798
           Summary: Access checking of template alias not done at the
                    point of use
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: eric.niebler at gmail dot com

The following compiles with clang, but not with gcc-4.8.2

////////////////////////////////////////////
template<typename Derived>
using base_t = typename Derived::base_t;

template<typename Derived>
struct base
{
private:
  friend Derived;
  using base_t = base;
  base() {}
};

template<typename T>
struct derived : base<derived<T>>
{
  using base_t<derived>::base_t;
};

int main()
{
  derived<int> d;
}
/////////////////////////////////////////////

Result:

test.cpp: In substitution of ‘template<class Derived> using base_t = typename
Derived::base_t [with Derived = derived<int>]’:
test.cpp:16:26:   required from ‘struct derived<int>’
test.cpp:21:16:   required from here
test.cpp:9:22: error: ‘using base_t = struct base<derived<int> >’ is private
   using base_t = base;
                      ^
test.cpp:2:40: error: within this context
 using base_t = typename Derived::base_t;

Reply via email to