Я думаю, что должен написать ответ, чтобы другие могли его увидеть.
В комментарии, написанном Мартином Мортеролом, он объясняет, почему вы получаете ошибку.
Вы сравниваете функцию exp с 0.assert(!(base == 0 && exp <= 0));
Я предполагаю, что вы хотите утверждать против отрицательных показателей, поэтому я заменил exp на exponent, и он выдал правильные данные в соответствии с предположением.
Exp - это функция, доступная вЗаголовок cmath, который возвращает экспоненциальную функцию base-e для x, которая e возведена в степень x: ex.
Что касается того, почему GCC компилируется, то похоже, что он полностью игнорирует строку утверждения, как видно наGodbolt, если мы посмотрим в сборке
https://godbolt.org/z/BZIw8z
Если мы заменим assert на static_assert, gcc выдаст нам ту же ошибку, что и clang
https://godbolt.org/z/UpQ6Ks