如何设置具体值给概念模板class显式实例化?

How to set the specific value to the concept template class explicit instantiation?

我有如下代码:

#include <concepts>
//Fibo Begins
    template <std::unsigned_integral num>
    struct Fibo {
        constexpr static std::size_t value = Fibo<num - 1>::value + Fibo<num - 2>::value;
    };

    template <>
    struct Fibo<1> {
        constexpr static std::size_t value = 1;
    };

    template <>
    struct Fibo<2> {
        constexpr static std::size_t value = 1;
    };
//Fibo ends

编译器给出参数 1 和 2 无效的错误 这里发生了什么?我该如何解决?

首先,您使用的语法是针对受限类型模板参数,而不是 non-type 具有受限类型的模板参数。所以编译器抱怨它需要一个类型作为模板参数,而不是一个值。

对于具有约束类型的 non-type 模板参数,它应该是 std::unsigned_integral auto num

但是 12 的类型是 int。它们不是无符号的,您的类型约束正确地拒绝了它们。

例如,

1u2u 将是无符号整数并被模板参数接受。

对于具有占位符类型的 non-type 模板参数,不仅提供 value,而且提供 type,意义重大。

看起来好像您真的希望类型是 std::size_t,而不是任何无符号整数。所以也许只是将其用作 non-type 模板参数的类型而不是约束。