c++ - GCC 7 没有选择正确的类型特征特化

标签 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> >’ 我是不是弄错了什么,或者这就是您在实验性编译器上得到的结果?

编辑:强制性 godbolting:

https://godbolt.org/g/Y1EFYC

最佳答案

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;
};

关于c++ - GCC 7 没有选择正确的类型特征特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664852/

相关文章:

c - gcc 用 memcpy 和 memset 替换循环

c - GCC编译时分错误

c++ - 在 C++ 中处理音频

c++ - 在 C++ 中将数组作为参数传递

c++ - GCC 中的不同模板错误格式?

c++ - 模板化成员函数和参数转发

c++通用编译时for循环

c++ - 在 Python-C++-C-Fortran 2003 程序中链接英特尔的 MKL

c++ - SFINAE检测静态方法

c - cygwin 中的 gcc 编译器找不到 X 窗口目录