无法将非类型模板参数传递给基类模板

时间:2020-07-10 16:23:33

标签: c++ templates

现代C ++的新手,试图弄清楚这里发生了什么。以下代码可以正常编译:

template<int base_num>
class Base{
public:
  Base() {}
};


template<int derived_num>
class Derived : public Base<0> { // Integer literal passed to base template
public:
  Derived(): Base() {}
};

以下内容:

template<int base_num>
class Base{
public:
  Base() {}
};


template<int derived_num>
class Derived : public Base<derived_num> { // Non-type template parameter passed to base template
public:
  Derived(): Base() {}
};

失败:

类“ Derived ”没有任何名为“ Base”的字段

我推测是因为derived_num本身不算作“结构类型”,但不确定。希望有人可以解释这里发生的事情,以及是否有办法将非类型模板参数“传递”到基类模板。

更新

明确定义模板“修复”此问题

template<int derived_num>
class Derived : public Base<derived_num> {
public:
  Derived(): Base<derived_num>() {}
};

但是对于更复杂的基本模板和多个构造函数来说,它们变得非常繁琐。如果可以避免,我希望这样做,但我仍然不明白为什么此修复程序也起作用。

更新2:

问题代码在GCC和clang失败,但是works on MSVC。编译器错误? (谁的bug,GCC / Clang或MSVC?)调用MSVC扩展?现在,我已经超出了我的想法,将耐心等待标准专家告诉我这里应该发生什么。

0 个答案:

没有答案
相关问题