Spec-Zone.ru › C++

std::meta::can_substitute

Определён в заголовочном файле <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() {}

См. также

substitute
(C++26)
подставляет отражённые аргументы в отражённый шаблон
(шаблон функции)
reflect_constant
(C++26)
возвращает отражение, представляющее значение или объект параметра шаблона, пригодное для использования в качестве константного аргумента шаблона
(шаблон функции)
reflect_object
(C++26)
возвращает отражение, представляющее объект, пригодное для использования в качестве константного аргумента шаблона
(шаблон функции)
reflect_function
(C++26)
возвращает отражение, представляющее функцию, пригодное для использования в качестве константного аргумента шаблона
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/can_substitute

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API