vendredi 29 juin 2018

decltype((void)T{}) in template Partial Specialization not deduce?

template<typename T,typename U = void>
struct Test
{
    static const int value = 0;
};
template<typename T>
struct Test<T, decltype((void)T{})>
{
    static const int value = 2;
};

template<typename T>
struct Test<T*,  decltype((void)T{})>
{
    static const int value = 1;
};

int main(){       
   cout<<Test<int*>::value<<endl;
    return 0;
}

code on gcc/clang both get error:ambiguous ,but decltype change to void_t is ok.why?

Aucun commentaire:

Enregistrer un commentaire