Поскольку расширенные версии constexpr (я думаю, из С++ 14), вы можете объявлять функции constexpr, которые могут быть использованы как "реальные" constexpr, то есть код, выполняемый во время компиляции, или может вести себя как встроенные функции. Итак, когда у вас может быть эта программа:
#include <iostream>
constexpr int foo(const int s) {
return s + 4;
}
int main()
{
std::cout << foo(3) << std::endl;
const int bar = 3;
std::cout << foo(bar) << std::endl;
constexpr int a = 3;
std::cout << foo(a) << std::endl;
return 0;
}
Конечно, результат:
7
7
7
пока что так хорошо. Поэтому мой вопрос: есть ли способ (возможно, стандартный) знать в foo (const int s), если функция запускается во время компиляции или во время выполнения?
EDIT: Также возможно узнать во время выполнения, если функция была оценена во время компиляции?