为什么我在定义这个 C++ 概念时会出错?

Why am I getting errors when I define this C++ concept?

我正在学习 Josh Lospinoso 的 C++ 速成课程,并且我正在尝试向我展示如何使用概念来约束方法参数的示例,并且还想让我使用 type_traits。但是,我收到错误消息,指出它的参数列表丢失并且它具有无效的类型说明符组合。这是概念和方法:

template <typename T>
concept bool Averageable() {
    return std::is_default_constructible<T>::value && requires (T a, T b) {
        { a += b } -> T;
        { a / size_t{ 1 } } -> T;
    };
}

template <Averageable T>
T mean(const T* values, size_t length) {
    T result{};
    for (size_t i{}; i < length; i++) {
        result += values[i];
    }
    return result / length;
}

我认为您以错误的方式定义了您的概念。它应该是这样的:

template <typename T>
concept Averageable =
    std::is_default_constructible<T>::value && requires (T a, T b) {
        { a += b          } -> std::same_as<T>;
        { a / size_t{ 1 } } -> std::same_as<T>;
    };

DEMO

我没有在 MVSC 中启用 C++20。没想到必须要做,但它做到了,所以现在一切都很好。