Blame tests/run/curiously_recurring_template_pattern_GH1458_suport.h

Packit 562c7a
template<typename T, class Derived>
Packit 562c7a
class Base {
Packit 562c7a
public:
Packit 562c7a
    Base(T x) : x_(x) { };
Packit 562c7a
Packit 562c7a
    Derived half() {
Packit 562c7a
        Derived d(x_ / 2);
Packit 562c7a
        return d;
Packit 562c7a
    };
Packit 562c7a
Packit 562c7a
    virtual T calculate() = 0;
Packit 562c7a
    virtual ~Base() { };
Packit 562c7a
Packit 562c7a
protected:
Packit 562c7a
    T x_;
Packit 562c7a
};
Packit 562c7a
Packit 562c7a
Packit 562c7a
template<typename T>
Packit 562c7a
class Square : public Base<T, Square<T> > {
Packit 562c7a
public:
Packit 562c7a
    Square(T x) : Base<T, Square<T> >(x) { };
Packit 562c7a
Packit 562c7a
    T calculate() { return this->x_ * this->x_; }
Packit 562c7a
};
Packit 562c7a
Packit 562c7a
Packit 562c7a
template<typename T>
Packit 562c7a
class Cube : public Base<T, Cube<T> > {
Packit 562c7a
public:
Packit 562c7a
    Cube(T x) : Base<T, Cube<T> >(x) { };
Packit 562c7a
Packit 562c7a
    T calculate() { return this->x_ * this->x_ * this->x_; }
Packit 562c7a
};