0
より良い単語がないため、「SFINAE」のコーバーフォーマットのサイズコードを実装しようとしています。しかし、たとえば、size_code<3>
が0x1b
と評価されているため、機能しません。どうしましたか?可変テンプレート「SFINAE」が機能しない
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;
は、それが何に評価されてはなりません。このコードは、 'size_code'を何度も再定義するためのものです。 –
このためには、おそらく 'constexpr'関数を書いたほうがよいでしょう。 – TartanLlama
@ T.C。奇妙なgccですが、clangはこれを認識します。 – user1095108