Does dynamic_cast violate LSP?
07:47 08 Nov 2025

Does the code below violates Liskov Substitution Principle (LSP)?

class Object
{
public:

    virtual ~Object() = default;
};

class A : public Object
{
public:

    void printA()
    {
        std::cout << "A" << std::endl;
    }
};

class B : public Object
{
public:

    void printB()
    {
        std::cout << "B" << std::endl;
    }
};

void func(A* a)
{
    a->printA();

    B* b = dynamic_cast(a);

    if (b != nullptr)
    {
        b->printB();
    }
}

LSP is all about subclasses, but B is not a subclass of A, so LSP is not violated, right?

c++ liskov-substitution-principle solid