【问题标题】:CRTC without default constructor [duplicate]没有默认构造函数的 CRTC [重复]
【发布时间】:2015-07-01 17:57:15
【问题描述】:

我无法确定这是否是我的编译器的问题:

class A
{
public:
    A(int i) {}
};

template <typename T>
class B : public A
{
public:
    B(int i) : A(i) {}
    T test() {return T(10);}
};

class C : public B<C>
{
public:
    C(int i) : B(i) {}
};

int main()
{
    C c(5);
}

错误:类模板“B”的参数列表丢失

此代码在 Visual Studio 2012 中似乎可以正确编译,但它不适用于 icpc 9.1(我必须在此项目中使用它)。

【问题讨论】:

  • 你的意思是C(int i) : B&lt;C&gt;(i) {}
  • @Jarod42:这可能会解决问题,但语言不需要它。
  • g++clang++ 都将按原样编译。
  • Class A 可以删除,对吧?
  • 好像是编译器bug:stackoverflow.com/questions/8887864/…

标签: c++ crtp icc


【解决方案1】:

代码是正确的。

icpc 的一种可能解决方法是完全指定基类:

C(int i) : B<C>(i) {}

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 2020-05-19
    • 2015-07-24
    • 2020-02-07
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多