>That is not metaprogramming as it is known by programmers.
By what programmers? I have a feeling we are coming from completely different places here.
What do you call what Smalltalk programmers do? In Smalltalk, what we call "meta-programming" happens a great deal but I've never seen eval called in a Smalltalk program ever.
Have you read the book "The art of the meta-object protocol"? Everything in that book is meta-programming yet I don't recall eval being used anywhere, and much of the code was simply to allow programs to discover things about the program itself at runtime.
I have not read that book, but the extensibility features of the CLOS are a world apart from some fixed set of API calls used to make decisions based on object metadata at runtime. CLOS is hugely powerful an entirely extensible down to the core of the Lisp axioms, and nothing at all like some simple set of runtime API calls.
That a kind of metaprogramming is not as powerful as another kind does not prevent it from being metaprogramming.
Some C++ template trickery is clearly metaprogramming - at least, it is to me and people in the C++ community who refer to it as such. It does not give the flexibility that's available in a Lisp, but it's still metaprogramming.
C++ templates are clearly metaprogramming in every way. I cannot think of a case in which they are not metaprogramming. If you brought up C++ metaprogramming with the assumption that I would argue it's not metaprogramming, you were mistaken.
By what programmers? I have a feeling we are coming from completely different places here.
What do you call what Smalltalk programmers do? In Smalltalk, what we call "meta-programming" happens a great deal but I've never seen eval called in a Smalltalk program ever.
Have you read the book "The art of the meta-object protocol"? Everything in that book is meta-programming yet I don't recall eval being used anywhere, and much of the code was simply to allow programs to discover things about the program itself at runtime.