Aşağıdaki minimal örnekte gcc ve clang ve hatta Visual Studio üzerinde çalışıldığını ancak icc ile derlenmediğini keşfettim. Bunun geçerli C++ olup olmadığını belirlemeye çalışıyorum, ama sorularıma cevap veren standardın ilgili bölümlerini bulamıyorum çünkü bu birkaç farklı kavramın bir araya getirilmiş hali.Varsayılan şablon parametrelerini değişken şablon şablon parametrelerinde
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
bu geçerli C++ mı: icc (16.0.3) ile
// 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;
}
, derleme aşağıdaki hata veriyor?
Bana göre, C
, ikinci şablon parametresi için varsayılan bir değere sahip olduğu için ile F<D>
geçerli bir yapım olması gerektiği anlamına geliyor.
Olası yinelenen gerekli mi şablon şablon parametresini kullanırken varsayılan parametreleri açık bir şekilde listelemek için?] (http://stackoverflow.com/q/24017466/27678) – AndyG
'template class F' denediniz mi? –
Yakk
@Yakk: Sorunu gidermek için maalesef – ryan