rwols
rwols

Reputation: 3078

Is it possible to ensure a constexpr function is called at most once at compile time?

As the title asks: Is it possible to ensure a constexpr function is called at most once at compile time?

This clearly won't be possible if the function is not constepxr; I could write a function that gets called whenever I press the space bar, so the compiler could never figure that out at compile time.

Upvotes: 4

Views: 736

Answers (1)

Vittorio Romeo
Vittorio Romeo

Reputation: 93364

Short answer: no, because constexpr functions cannot read/set external state. (They can have internal state, but they still need to be "pure").


Real answer: probably yes, but it's a bad idea. There is a series of blog posts by Filip Roséen which covers the implementation of stateful constexpr functions by abusing friendship and ADL:

The technique is very arcane and complicated. It is considered an abuse of features by CWG, which is trying to make it ill-formed with issue #2118.

Upvotes: 13

Related Questions