c++ type alias not working when testing specialization
07:43 25 Nov 2018

Using C++, trying to implement: is_specialization_of

template class Template>
struct is_specialization_of : std::false_type {};

template class Template, typename... Tn>
struct is_specialization_of, Template> : std::true_type {};

template
struct tstruct {};

template
using ustruct = tstruct;

int main( int argc, char **argv )
{
    printf( "test u against u, return %s\n", is_specialization_of, ustruct>::value ? "true" : "false" );
    printf( "test u against t, return %s\n", is_specialization_of, tstruct>::value ? "true" : "false" );
    printf( "test t against u return %s\n", is_specialization_of, ustruct>::value ? "true" : "false" );
    printf( "test t against t, return %s\n", is_specialization_of, tstruct>::value ? "true" : "false" );
    getchar();
    return 0;
}

Return:

test u against u, return false
test u against t, return true
test t against u return false
test t against t, return true

Looks like the type alias is not considered exactly as the original type

I am using Visual Studio Community 2017

Microsoft (R) C/C++ Optimizing Compiler Version 19.15.26732.1 for x64

However when trying to compile the same code using gcc, it returns:

test u against u, return true
test u against t, return true
test t against u return true
test t against t, return true

Is there anything I can do for a workaround?

c++ templates specialization type-alias