vso*_*tco 6 c++ templates language-lawyer c++11
我正在尝试使用一个using指令来引入public派生类的访问声明,在基类中声明一些内部类模板.码:
template <typename T>
class Base
{
public:
template<typename U>
struct Inner;
};
template<typename T>
class Derived: private Base<T>
{
public:
using typename Base<T>::template Inner; // make it visible
Inner<T>* ptr; // no need for typename here, non-qualified name
};
int main() {}
Run Code Online (Sandbox Code Playgroud)
无论是g ++还是clang ++都没有编译这段代码,两者都在抱怨
错误:'template'之前的预期unqualified-id
据我所知,Inner是一个依赖的模板名称,所以应该::template在限定其名称时使用,也应该在typename之前使用,因为Base<T>::Inner是依赖类型.我已经尝试了所有可能的组合,有/没有typename/template,没有编译.有没有使用任何方式Inner在public部分Derived?
Bar*_*rry 10
不可能.甲using声明,从[namespace.udecl]:
usingtypenameopt nested-name-specifier unqualified-id ;
但是不合格的id不能是类模板.
您可以改为使用别名:
template<typename T>
class Derived: private Base<T>
{
public:
template <typename U>
using Inner = typename Base<T>::template Inner<U>;
Inner<T>* ptr;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |