派生模板类constexpr构造函数

时间:2017-01-05 12:25:30

标签: c++ templates constructor constexpr derived

我正在尝试使用constexpr构造函数从模板类派生类,该类具有constexpr构造函数。派生类仅定义构造函数。我收到了这个错误...

main.h

template <class T>
class ExprTemplate
{
public:
const T a;
constexpr ExprTemplate (const T in):a(in){}
constexpr T GetA() const {return a;}
};

class DelivExpr : public ExprTemplate<int>
{
    public:
        constexpr DelivExpr(const int in): ExprTemplate<int> (in){}

};

template <int n>
struct constN
{
    constN() {i = n;}
        uint32_t i;
};


main.cpp

int main()
{
    constN  <   1                               >       e0;//OK
    constN  <   (ExprTemplate<int>(0)).GetA()   >       e1;//OK

    constN  <   (DelivExpr(0)).GetA()           >       e2;
//error, function call must have a constant value in a constant expression

    constexpr DelivExpr deliv(0);
    constN  <   deliv.GetA()                    >       e3;//OK!!!
}

有人可以帮忙吗?)

0 个答案:

没有答案