2017-10-10 20 views
0

gcc 7.2에 몇 가지 문제가 있습니다. 나는이 유형의 특성을GCC 7에서 올바른 형질 특성을 선택하지 않았습니다.

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

그 소리 (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

답변

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