// PR c++/53581 template class Child; template class Base { public: Child operator-(const Base &m) const { Child diff; return diff; } A test() const { return 0; } private: A values[M * N]; }; template class Ops { public: virtual ~Ops() {} bool bar() const { Child mat; return (*static_cast*>(this) - mat).test(); } }; template class Child : public Base, public Ops {}; class ImageWarp { bool bar() const { return foo.bar(); } Child foo; };