When an interface contains a pure virtual method, it is recommended to use a virtual destructor. So for example, I have this code:
    template
    class A {
    protected:
        char buffer[Size];
    public:
        virtual void method() = 0;
        A() = default;
        virtual ~A() = default;
    };
    template
    class B : public A {
    public:
        void method() override;
        B() = default
        ~B() = default;
    };
    int main() {
        B b;
        b.method();
    }
But when I try to compile this with g++ for an Arduino Due, I get the following error:
    main.cpp:(.text._ZN4r2d29robot_arm22uarm_gcode_generator_cILj100EED0Ev[_ZN4r2d29robot_arm22uarm_gcode_generator_cILj100EED5Ev]+0x6): undefined reference to `operator delete(void*, unsigned int)'
However, when I remove the destructor from A entirely, it removes the error, but wouldn't this cause Undifed Behaviour? Also, when I just remove the virtual keyword from the destructor of A it gives me the same error message.
