C++20 Concepts

What advantage do C++20 concepts provide over SFINAE for constraining templates?

// SFINAE approach
template<typename T>
auto add(T a, T b) -> decltype(a + b) { return a + b; }

// Concepts approach
template<typename T>
requires requires(T a, T b) { a + b; }
T add(T a, T b) { return a + b; }