A Mathematician Lurking in the TechUnderWorld

A Mathematician Lurking in the TechUnderWorld

TechUnderWorld Skool

Why LLMs Will Never Replace a Competent C++ Developer

The hidden semantics of C++ put an end to the fantasy of automated programming.

Jose Crespo PhD's avatar
Jose Crespo PhD
Sep 12, 2026
∙ Paid

The Semantic Context Curse of Current AI

If you have spent enough time with C++, you already know the uncomfortable part: code that looks simple is often carrying far more meaning than it shows.

A logger is a perfect example. On the surface, it sounds trivial. Write a message. Add a timestamp. Send it somewhere. Done.

Except it is not.

Very quickly you are dealing with ownership, lifetimes, thread safety, formatting, templates, overloads, build settings, project conventions, and assumptions that live somewhere else in the codebase. Suddenly those five harmless-looking lines are dragging half the project behind them.

And this is exactly where current AI starts getting into trouble.

The problem is not simply that an LLM can forget something. The nastier problem is that one missed piece of meaning can infect everything that comes after it.

Coding agents are better than LLMs: they search, compile, test, and retry. But they still cannot escape the hidden semantic context beneath the code.

Change one innocent-looking line and you can introduce a dependency whose real meaning only becomes visible three calls later, in another file, or several generations down the road. If the model gets that first dependency wrong, the next piece of code can be built on the wrong assumption. Then the next one inherits it. And the next.

Now you do not have one bad line.

You have a family tree of bad lines.

Recent repository-level studies describe this kind of downstream propagation as cascade errors.

Math can compress the whole problem into something deceptively simple.

Once one hidden dependency enters the chain, every later step can inherit it. That is the context curse: one piece of hidden meaning becomes part of the context for the next piece, then the next, and so on.

If you are a developer, think of each c as a piece of context. c1 kicks off the chain, and every later c can inherit meaning from what came before.

So the dependencies start nesting.

Miss c1, and you are not just wrong once. You may be building c2, c3, and everything after them on top of the wrong semantic foundation.

That is how one innocent-looking mistake can turn into a whole family of bad decisions downstream.

And this is exactly where LLMs can fail so badly: they are not dealing with isolated lines anymore, but with a growing chain of meaning where every new step depends on what came before.

Seeing the Tokens Is Not the Same as Seeing the Meaning

This post is for paid subscribers

Already a paid subscriber? Sign in
© 2026 Jose Crespo, PhD · Privacy ∙ Terms ∙ Collection notice
Start your SubstackGet the app
Substack is the home for great culture