Perché le seguenti compilato con clang
ma non con g++ 4.9
argomento di default per la specializzazione parziale [Clang sì, GCC no]
#include <array>
template< typename T1, typename T2 , typename T3 = int>
struct A;
template<typename T, unsigned int N, typename T2, typename T3>
struct A< std::array<T,N>, T2, T3 > {
int a;
};
int main()
{
A< std::array<int,10>, double> a;
a.a +=3;
}
http://coliru.stacked-crooked.com/a/c7800f49ba5aac43
g ++ non trova una specializzazione adeguata e si lamenta con "incompleta genere". Mi chiedo da quando, l'argomento di default typename T3 = int
dovrebbe applicarsi per la specializzazione (o non si applica solo per la piena specializzazione?)
Perché stai usando 'int' senza segno invece di' std :: size_t'. Con quest'ultimo, entrambi i compilatori accettano il programma. – dyp
Correlati: http://stackoverflow.com/q/21740896/ – dyp
Potrebbe essere https://llvm.org/bugs/show_bug.cgi?id=16279 – dyp