c++ type alias not working when testing specialization
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?