Можно ли построить черту типа в C ++, которая проверяет, является ли данный тип шаблона инстанцируемым с данными типами в качестве параметров шаблона?Если это возможно, как это можно сделать?
Например:
static_assert(is_template_instantiable_v<std::optional, int, int>);
static_assert(is_template_instantiable_v<std::vector, double>);
Первое утверждение не будет выполнено, поскольку std::optional
ожидает только один параметр шаблона,Второе утверждение не завершается неудачно, std::vector
может быть создан только с одним параметром шаблона, поскольку его второй параметр шаблона имеет значение по умолчанию.
Если вышеупомянутое возможно, будетможно допустить, чтобы признак типа был ложным в следующем случае (и не вызывал ошибку компиляции):
static_assert(is_template_instantiable_v<std::vector, int &>);
Поскольку экземпляр std::vector
не может быть создан со ссылкой в качестве типа значения.
Полагаю, первый пример может быть тиражирован, а второй - только стандартным кодом C ++.