我在一个项目中遇到了以下情况,其中一个基类具有一个函数模板,该模板被派生类模板中的非模板函数隐藏。在类层次结构的更深处,非模板化函数通过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)