Hvorfor er offentlig overbelastning i konflikt med privat bruksdirektiv på noen kompilatorer?

 C Programming >> C C# Program >  >> C++
Hvorfor er offentlig overbelastning i konflikt med privat bruksdirektiv på noen kompilatorer?

Jeg tror det som gjelder her er [namespace.udecl]/17:

(uthevelse mine) i kombinasjon med [namespace.udecl]/19:

Brukserklæringen i MoreDerived oppretter et synonym for Derived::get som i seg selv er et synonym for overbelastningssettet som består av medlemsfunksjonen Derived::get og medlemsfunksjonsmalen Base::get . Sistnevnte er ikke tilgjengelig ved brukserklæringen i MoreDerived (fordi den er privat i Derived ). Dermed er GCC og Clang korrekte, denne koden skal ikke kompileres. Flytter brukserklæringen i Derived fra den private til den offentlige delen, for eksempel

template<typename T> class Derived : public Base
{
public:
  using Base::get;
  const T& get() const;
};

løser problemet...