2015-05-12 10 views
6

seguente codice è stato compilato con successo con clangore, ma gcc non riesce:gcc non accetta espansione pacchetto in discussione modello predefinito

struct fn 
{ 
    template <typename ... Args> 
     static constexpr bool call (Args ...) { return true; } 
}; 

template <typename ... T> 
    static constexpr bool f = false; 

template <typename ... Ts, bool F = fn::call(f<Ts> ...)> 
    void hoge() {} 

int main() {} 

gcc 5.1.0 (-Wall -Wextra -std = C++ 14 - pedantic) dice

clang 3.6.0 e 3.5.0 non dà errori.

Am I e clang violando le regole C++ o si tratta di un bug gcc?

risposta

4

Non hai violato alcuna regola. Sembra essere un problema con il supporto del GCC per i modelli variabili, non solo argomenti di default, perché questa regolazione funziona:

template <typename ... T> 
struct f { 
    static constexpr bool v = false; 
}; 

template <typename ... Ts, bool F = fn::call(f<Ts>::v ...)> 
    void hoge() {} 

http://coliru.stacked-crooked.com/a/ff81b6ab052a748b

Per quanto ne so, un modello variabile è equivalente a un modello di classe avvolgere un membro statico, quindi questo non dovrebbe causare problemi oltre a dover scrivere il ::v.

Problemi correlati