Namespaces
Variants

std::meta::can_substitute

С ru.cppreference.net
< cpp | meta
 
 
 
Библиотека отражений
Запросы доступности членов
Идентификация области видимости
Запросы членов отражения
Отражение аннотаций
Извлечение значений
Подстановка отражения
Отражение результата выражения
Генерация определения класса

Первичные категории типов
Составные категории типов
Свойства типов ➜
Отношения типов
 
Типы и запросы отражения
Запросы отражения
Запросы компоновки отражения
Свойства типов
Запросы свойств типов
 
Определено в заголовочном файле <meta>
template< std::meta::reflection_range R = std::initializer_list<std::meta::info> >
consteval bool can_substitute( std::meta::info templ, R&& arguments );
(начиная с C++26)

Пусть Z обозначает шаблон, представленный templ, Args... обозначает значения, типы или шаблоны, представленные последовательными элементами arguments, определяет, является ли Z<Args...> допустимым идентификатором шаблона.

Возвращает true если Z<Args...> является допустимым и не именует функцию с невыведенным замещающим типом возврата; в противном случае возвращает false.

Параметры

templ - отражение шаблона
arguments - диапазон range отражений

Возвращаемое значение

Логическое значение, указывающее, допустима ли подстановка.

Исключения

Выбрасывает std::meta::exception если только templ не представляет шаблон, и каждый элемент arguments не представляет конструкцию, подходящую в качестве аргумента шаблона.

Примечания

Если формирование Z<Args...> приводит к сбою за пределами непосредственного контекста, программа считается некорректной.

Пример

#include <meta>
#include <tuple>

static_assert(std::meta::can_substitute(^^std::tuple, {^^void}));
static_assert(can_substitute(^^std::tuple, {^^int, ^^int})); // using argument-dependent lookup
static_assert(!can_substitute(^^std::tuple, {std::meta::reflect_constant(42)}));

consteval
{
    try
    {
        can_substitute(^^std::tuple, {^^::}); // Throws std::meta::exception
                                              // the global namespace cannot be a template arg
    } catch (std::meta::exception&) {}
}

int main() {}

См. также

получает отражение результата подстановки отраженных аргументов в отраженный шаблон
(шаблон функции)
возвращает отражение, представляющее значение или объект параметра шаблона, подходящее для использования в качестве константного аргумента шаблона
(шаблон функции)
возвращает отражение, представляющее объект, подходящее для использования в качестве константного аргумента шаблона
(шаблон функции)
возвращает отражение, представляющее функцию, подходящее для использования в качестве константного аргумента шаблона
(шаблон функции)