This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ 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]

Re: Possible compilation failure in tr1/hashtable?


Hi Francesco,
> Hello,
>
> I don't know if this is a bug, but I spotted it with ICC. It is about a
> friend declaration in tr1/hashtable, which references a struct declared
> in tr1/hashtable_policy.h with a different number of template arguments.
Actually, there are also specializations with the exact number of
template arguments (3), and we are interested in granting access to
those... We can probably apply the patch (apparently doesn't hurt in
GCC) but the issue seems really a subtle one about friendship across
namespaces. To be safe, I would ask you to check Bugzilla (I think we
have already something about that) and in case, file a DR saying that
something like the below compiles with ICC and doesn't with GCC:

Thanks,
Paolo.

//////////////////

 namespace detail
{
template<typename A, typename B>
  class one;

template<typename C>
  class one<int, C>;
}

template<typename T>
  class two
  {
    template<typename A /* , typename B */>
      friend class detail::one;

    int num;
  };

namespace detail
{
template<typename C>
  struct one<int, C>
  {
    void f()
    {
      two<int> t;
      t.num = 1;
    }
  };
}

int main()
{
  detail::one<int, double> o;
  o.f();
}


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