0

適切な言葉がないため、「SFINAE」を使用して cbor 形式のサイズ コードを実装しようとしています。size_code<3>しかし、たとえば、 は に評価されるため、機能しません0x1b。どうしたの?

template <::std::size_t N,
  typename = ::std::enable_if_t<N <= 0x17>
>
constexpr ::std::uint8_t const size_code = N;

template <::std::size_t N,
  typename = ::std::enable_if_t<(N > 0x17) &&
    (N <= ::std::numeric_limits<::std::uint8_t>::max())
  >
>
constexpr ::std::uint8_t const size_code = 0x18;

template <::std::size_t N,
  typename = ::std::enable_if_t<
    (N > ::std::numeric_limits<::std::uint8_t>::max()) &&
    (N <= ::std::numeric_limits<::std::uint16_t>::max())
  >
>
constexpr ::std::uint8_t const size_code = 0x19;

template <::std::size_t N,
  typename = ::std::enable_if_t<
    (N > ::std::numeric_limits<::std::uint16_t>::max()) &&
    (N <= ::std::numeric_limits<::std::uint32_t>::max())
  >
>
constexpr ::std::uint8_t const size_code = 0x1a;

template <::std::size_t N,
  typename = ::std::enable_if_t<
    (N > ::std::numeric_limits<::std::uint32_t>::max()) &&
    (N <= ::std::numeric_limits<::std::uint64_t>::max())
  >
>
constexpr ::std::uint8_t const size_code = 0x1b;
4

2 に答える 2