2017-10-10 2 views
0

Ich habe einige Probleme mit gcc 7.2. Ich habe diese Art CharakterzugGCC 7 nicht die richtige Typ Merkmal Spezialisierung

template<typename T> 
struct audio_frame_channels {} 

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

und ich benutze es dann wie folgt aus:

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

Klirren 6 hat kein Problem mit diesem, aber gcc 7.2 beklagt, dass ‘value’ is not a member of ‘top1::audio::audio_frame_channels<std::array<float, 1> >’ Habe ich etwas falsch verstanden, oder ist das, was Sie auf experimentelle Compiler bekommen?

Edit: Obligatorisch godbolting:

https://godbolt.org/g/Y1EFYC

Antwort

1

Der zweite Template-Parameter für std::array ist ein std::size_t, nicht int. Sie müssen es wie folgt ändern:

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