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