GCC 7没有选择正确的类型特征专业化

时间:2017-10-10 10:49:09

标签: c++ templates gcc typetraits

我在使用gcc 7.2时遇到了一些问题。我有这种类型的特质

template<typename T>
struct audio_frame_channels {}

template<int N>
struct audio_frame_channels<std::array<float, N>> {
  static constexpr auto value = N;
};

然后我像这样使用它:

  template<typename T>
  auto redirect(T& buf) ->
  ProcessData<audio_frame_channels<std::remove_reference_t<
                                     decltype(buf[0])>>::value>;

clang 6对此没有任何问题,但gcc 7.2抱怨‘value’ is not a member of ‘top1::audio::audio_frame_channels<std::array<float, 1> >’ 我有什么不对劲,或者这是你在实验编译器上获得的东西?

编辑:强制性的神灵:

https://godbolt.org/g/Y1EFYC

1 个答案:

答案 0 :(得分:1)

std::array的第二个模板参数是std::size_t,而不是int。你需要改变它:

template<std::size_t N> //instead of int N
struct audio_frame_channels<std::array<float, N>> {
  static constexpr auto value = N;
};