Скажем, у меня есть некоторый шаблонный класс в зависимости от типа T. T может быть почти любым: int, int*, pair <int, int> или struct lol; это не может быть void, ссылка или что-то еще cv-квалификационное. Для некоторой оптимизации мне нужно знать, могу ли я подклассом T. Таким образом, мне нужен некоторый тип признаков is_subclassable, определяемый как логическая комбинация основных признаков или с помощью некоторых трюков SFINAE.
В исходном примере int и int* не являются подклассами, а pair <int, int> и struct lol.
EDIT. Как показано ниже, объединения также не являются подклассами, а T также может быть типом объединения.
Как написать тип признака, который мне нужен?