Рассмотрим следующий код:
#include <stdio.h>
constexpr int f()
{
return printf("a side effect!\n");
}
int main()
{
char a[f()];
printf("%zd\n", sizeof a);
}
Я ожидал, что компилятор будет жаловаться на вызов printf
внутри f
, потому что f
должен быть constexpr
, но printf
- нет. Почему программа компилирует и печатает 15?