2016-02-14 7 views
5

GCC mi dà un errore "argomento modello 2 non valido" quando provo a creare un'istanza di un modello come questo (vedere la riga using Check). Ero molto curioso di poter ottenere un puntatore al membro usando decltype al di fuori di un elenco di parametri del modello, ma non all'interno di uno (vedere la definizione della variabile p2). E infatti Clang ha compilato questo codice. È un bug in GCC, o questo codice è in realtà non valido e Clang è troppo inclusivo?Utilizzare decltype all'interno dell'elenco dei parametri del modello per dedurre il tipo di puntatore al membro della classe

template <class T, T t> struct checker_template {}; 

struct S { int n; }; 

int main() { 
    S s; 
    constexpr auto p1 = &S::n; 
    constexpr auto p2 = &decltype(s)::n; 
    using Check = checker_template<int S::*, &decltype(s)::n>; 
    return 0; 
} 
+0

Qualsiasi motivo specifico si è scelto di non includere l'errore completo da GCC? – kfsone

+1

Bug, già risolto nel bagagliaio. –

+0

@kfsone era letteralmente l'unica informazione significativa. – grisumbras

risposta

0

La risposta è stata fornita da T.C. Questo è davvero un bug in GCC.

Problemi correlati