https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68821
Bug ID: 68821 Summary: g++ does not warn/error when virtual function return type is different than the one it overrides Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: bobby.prani at gmail dot com Target Milestone: --- Consider: typedef void (*obj_t)(void); class parent { public: struct obj_base { virtual ~obj_base() {} virtual void operator()(void)=0; }; template <typename T> struct obj : public obj_base { typedef void (T::*obj_t)(void); T* p; obj_t f; obj(T* p, obj_t f) : p(p), f(f) {} int *operator()(void) { return 0; } }; }; The overridden function has a different return type in the two cases. g++ does not warn/error out about this.