Я не думаю, что вы можете сделать это вообще для произвольного шаблона класса с сочетанием параметров типа и не-типа.
Вы можете приблизиться к более конкретным наборам параметров, но я не знаю, какое-либо образом обрабатывать общий случай:
#include <type_traits>
template <typename T, std::size_t N>
class MyClass {};
// assume not the same
template<typename T, typename U>
struct my_trait : std::false_type
{ };
// both specializations of MyClass
template<typename T1, std::size_t N1, typename T2, std::size_t N2>
struct my_trait<MyClass<T1, N1>, MyClass<T2, N2>>
: std::true_type
{ };
// both specializations of some class template Templ<typename, std::size_t>
template<template<typename, std::size_t> class Templ, typename A1, std::size_t S1, typename A2, std::size_t S2>
struct my_trait<Templ<A1, S1>, Templ<A2, S2>>
: std::true_type
{ };
// both specializations of some class template Templ<typename...>
template<template<typename...> class Templ, typename... A1, typename... A2>
struct my_trait<Templ<A1...>, Templ<A2...>>
: std::true_type
{ };
@rhalbersma, а не дубликат, а другой вопрос хочет знать, как скажите, используют ли две специализации одно и то же определение, т. е. используют первичный шаблон или оба используют одну и ту же частичную специализацию или оба используют ту же самую явную специализацию. Насколько я могу судить, здесь не вопрос. –
@ Vincent, нужно ли черту работать для обнаружения использования шаблона _any_ класса или просто для 'MyClass'? Я не думаю, что вообще возможно для шаблонов классов, используя сочетание параметров типа и не-типа. –
@JonathanWakely удалил комментарий, похоже, не в состоянии отозвать закрытый голос. – TemplateRex