小编pah*_*pah的帖子

为什么公共重载与某些编译器上的private using指令冲突?

我在一个项目中遇到了以下情况,其中一个基类具有一个函数模板,该模板被派生类模板中的非模板函数隐藏。在类层次结构的更深处,非模板化函数通过using指令将函数显式带入范围。

这是一个简化的示例代码:

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

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

template<typename T> class MoreDerived : public Derived<T>
{
public:
  using Derived<T>::get; // <-- this causes the problem

  const T& call_get() {
    return get();
  }
};

template class MoreDerived<int>;
Run Code Online (Sandbox Code Playgroud)

Godbolt:https://godbolt.org/z/5MQ0VL

上面的代码在GCC和Clang上失败,出现以下错误:

<source>:15:28: error: 'template<class T> const T& Base::get() const' is inaccessible within this context

   15 | template<typename T> class …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance using-directives

11
推荐指数
1
解决办法
132
查看次数

标签 统计

c++ ×1

inheritance ×1

using-directives ×1