class 嵌套类型的概念

Concept for a class with nested types

我正在写一个概念,要求 class 有一个 ValueType 类型别名和一个静态函数 Check,需要 ValueType 和 returns void.

这是我目前的情况:

template <typename T>
concept bool Predicate()
{
    return requires(T object)
    {
        typename T::ValueType;
        requires (T::ValueType value)
        {
            {T::Check(value)} -> void;
        };
    };
}

编译时出现以下错误:error: expected ')' before 'value'.

这是我找到的一个解决方案,它包括将 Predicate 分成两个不同的概念:

template <typename T>
concept bool HasCheck()
{
    return requires (typename T::ValueType value)
    {
        {T::Check(value)} -> void;
    };
};

template <typename T>
concept bool Predicate()
{
    return requires(T object)
    {
        typename T::ValueType;
        requires HasCheck<T>();
    };
}

wandbox example


或者,您可以将 requires 子句与 && 链接起来:

template <typename T>
concept bool Predicate()
{
    return requires(T object)
    {
        typename T::ValueType;        
    } 
    && requires (typename T::ValueType value)
    {
        {T::Check(value)} -> void;
    };
}

wandbox example

你是over-compicating问题所在:

template <typename T>
concept bool Predicate = requires(typename T::ValueType obj) {
    { T::Check(obj) } -> void;
};