Description
When compiling constexpr-heavy code it would be nice to receive more feedback than "constexpr evaluation hit maximum step limit" or "constexpr evaluation exceeded maximum depth of N calls". Especially when you do not reach these limits with your code quite yet, getting some feedback, e.g. via the -ftime-trace
or some other means, how much allowed resources compilation of your code took, would be nice.
In the easiest case, this could mean to publish the evaluation counter for each EvaluateAsInitializer
call (and similar in the generated time trace log, along-side the maximum depth and the other tracked limits.
If evaluating a constexpr triggered recursively, these sub-expressions could get their own trace too.
template <typename T>
struct bar {
static const T v;
};
template <typename T>
const T bar<T>::v = 21*sizeof(T);
template <typename T>
struct foo {
static const T v;
};
template <typename T>
const T foo<T>::v = bar<T>::v;
int main() {
return foo<short>::v;
}
A time trace report for the above code would then include the following listing:
foo<short>::v (steps=4, depth=2, loops=0)
bar<short>::v (steps=3, depth=1, loops=0)
Other alternatives to produce such a report are welcome too.