Check array contains element at compile time
You have to compare values char by char, or even simpler change const char* to std::string_view make your code work.

Thanks to the deduction guides, you can just write std::array = ... and template parameters will be automatically deduced.

Also, you can simplify your loop using a "range-based for".
 If we generalize for other types of compile-time array, we get:

#include &lt;array&gt;
#include &lt;string_view&gt;

using namespace std::string_view_literals;
constexpr std::array COEFFICIENTS = { "VERSION"sv, "CHANNELS"sv, "ADAPTIVE"sv };

template &lt;typename T, size_t N&gt;
constexpr bool array_has(const std::array&lt;T, N&gt;&amp; array, const T&amp; value) {
  for (const auto&amp; v : array) {
    if (value == v) return true;
  }
  return false;
}

constexpr bool coefficientExists(const std::string_view name)
{
    return array_has(COEFFICIENTS, name);
}

int main()
{
    static_assert(coefficientExists("VERSION"), "should exist");
    static_assert(!coefficientExists("TEST"), "should not exist");
}


With C++20 you can even do simpler:

#include &lt;algorithm&gt;
//...
template &lt;typename T, size_t N&gt;
constexpr bool array_has(const std::array&lt;T, N&gt; array, const T value) {
return std::any_of(array.begin(), array.end(), [value](auto current){ return current == value; });
}