Это не так.Вы должны использовать это, чтобы вызвать ошибку времени компиляции.
constexpr int a = f(), 0; // fails
constexpr int b = g(), 0; // fails
constexpr
функции, которые никогда не производят постоянное выражение, плохо сформированы;Диагностика не требуется.Это означает, что компиляторы делают все возможное, чтобы проверить, так ли это, но ваша программа в любом случае уже имеет ошибку.Похоже, gcc не видит, что printf
не является константным выражением. лязг ошибок при определении .