#include <iostream>

template < class Real >
class ICovBase {
    bool isTrue;
    Real* This() {
        return static_cast < Real* > (this);
    }
 public:
    virtual bool operator() (int a) const {
        std::cout << "Base class () called\n";
        return true;
    };
    ICovBase(int a) {
        isTrue = This()->operator()(a);
    }
    virtual ~ICovBase() {};
};

class Cov : public ICovBase < Cov > {
 public: 
    bool operator () (int a) const {
        std::cout << "Child class () called\n";
        return (a > 0);
    }
    Cov(int a): ICovBase < Cov >(a) {
    }
};

int main() {
    Cov test(5);
}