При наличии шаблона T и некоторого типа U я могу написать признак, проверяющий, является ли U экземпляром T. Для простого случая одного аргумента шаблона черта может выглядеть так:
Код: Выделить всё
#include
template struct foo {};
template struct foo {};
template struct is_instantiation_of_foo : std::false_type {};
template struct is_instantiation_of_foo : std::true_type {};
int main() {
static_assert(is_instantiation_of_foo{});
static_assert(!is_instantiation_of_foo{});
}
Предположим, я знаю только об основном шаблоне и не могу ввести статические члены, чтобы тривиальным образом отличить основной шаблон от специализации. Можно ли написать признак F, который будет std::true_type, когда T является экземпляром основного шаблона, и std::false_type, когда T является экземпляром специализации?
Полагаю, нет. И у меня нет реального варианта использования. Вопрос вызван просто любопытством.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... rom-instan