我在使用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> >’
我有什么不对劲,或者这是你在实验编译器上获得的东西?
编辑:强制性的神灵:
答案 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;
};