Ho scoperto che l'esempio di seguito riportato funziona su gcc e clang e anche su Visual Studio ma non viene compilato con icc. Sto cercando di determinare se questo è C++ valido, ma non sono in grado di trovare le parti rilevanti dello standard che rispondono alla mia domanda poiché si tratta di diversi concetti combinati.Utilizzo dei parametri del modello predefinito nei parametri del modello di template variad
// struct with multiple template parameters
template<typename A, typename B = int>
struct C
{
};
// struct that tries to use C's default second parameter without specifying it
template<typename D, template<typename E, typename ...> class F>
struct G
{
F<D> h;
};
int main()
{
G<char, C> i;
}
con ICC (16.0.3), la compilazione dà il seguente errore:
struct.cpp(12): error: too few arguments for template template parameter "F"
F<D> h;
detected during instantiation of class "G<D, F> [with D=char, F=C]" at line 17
È questo valido C++?
Per me sembra che dovrebbe essere, perché C
ha un valore predefinito per il suo secondo parametro modello, il che significa che F<D>
con F = C
deve essere una costruzione valida.
Possibile duplicato [E 'necessario elencare esplicitamente i parametri predefiniti quando si utilizza il parametro template template?] (http://stackoverflow.com/q/24017466/27678) – AndyG
Hai provato 'template class F?? –
Yakk
@Yakk: che non correggi il problema, purtroppo – ryan