2017-10-10 4 views
0

J'ai quelques problèmes avec gcc 7.2. J'ai ce trait de typeGCC 7 ne pas choisir la bonne spécialisation de type caractère

template<typename T> 
struct audio_frame_channels {} 

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

Et puis je l'utiliser comme ceci:

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

clang 6 n'a pas de problème avec cela, mais gcc 7.2 se plaint que ‘value’ is not a member of ‘top1::audio::audio_frame_channels<std::array<float, 1> >’ Ai-je obtenu quelque chose de mal, ou est ce que vous obtenez sur les compilateurs expérimentaux?

Edit: godbolting Obligatoire:

https://godbolt.org/g/Y1EFYC

Répondre

1

Le second paramètre de modèle pour std::array est un std::size_t, pas int. Vous devez le changer comme ceci:

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