J'essaye d'implémenter le code de taille pour le format de cbor avec "SFINAE", faute d'un meilleur mot. Mais cela ne fonctionne pas, comme size_code<3>
, par exemple, évalue à 0x1b
. Qu'est-ce qui ne va pas?modèle de variable "SFINAE" ne fonctionne pas
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;
Il ne faut pas évaluer à quoi que ce soit. Ce code est mal formé pour redéfinir plusieurs fois 'size_code'. –
Vous feriez probablement mieux d'écrire une fonction 'constexpr' pour cela. – TartanLlama
@ T.C. gcc bizarrerie, mais clang reconnaît cela. – user1095108