std::meta::is_template
Определён в заголовочном файле <meta> | ||
|---|---|---|
consteval bool is_template( std::meta::info r ); | (since C++26) |
Возвращает true, если r представляет собой шаблон функции, шаблон класса, шаблон переменной, шаблон псевдонима или концепт. В противном случае возвращает false.
Параметры
| r | - | значение отражения |
Возвращаемое значение
true, если r представляет шаблон; в противном случае false.
Примечания
Специализация шаблона не является шаблоном. Например,
std::meta::is_template(^^std::hive) — истина, но
std::meta::is_template(^^std::hive<long>) — ложь.
Пример
#include <cstddef>
#include <list>
#include <meta>
#include <type_traits>
// function
void fun1();
static_assert(!std::meta::is_template(^^fun1));
// function template
template<int>
void fun2();
static_assert(std::meta::is_template(^^fun2));
// variable
char var1[42]{};
static_assert(!std::meta::is_template(^^var1));
// variable template
template<std::size_t N>
char var2[N]{};
static_assert(std::meta::is_template(^^var2));
// class
struct S1;
static_assert(!std::meta::is_template(^^S1));
// class template
template<class T>
struct S2;
static_assert(std::meta::is_template(^^S2));
// type alias
using Int = int;
static_assert(!std::meta::is_template(^^Int));
// type alias template
template<typename T>
using List = std::list<T>;
static_assert(std::meta::is_template(^^List));
struct S3
{
// conversion function
operator int();
// conversion function template
template<typename T>
operator float();
// operator function
int operator[](int);
// operator function template
template<typename T>
int operator+=(const S3&);
};
static_assert(!std::meta::is_template(^^S3::operator int));
static_assert(std::meta::is_template(^^S3::operator float));
static_assert(!std::meta::is_template(^^S3::operator[]));
static_assert(std::meta::is_template(^^S3::operator+=));
// concept is a template
template<class T, class U>
concept Derived = std::is_base_of<U, T>::value;
static_assert(std::meta::is_template(^^Derived));
int main() {}
См. также
|
(C++26) | проверяет, является ли отражённая сущность шаблоном функции (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном переменной (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном класса (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном псевдонима (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном функции преобразования (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном функции-оператора (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном литерального оператора (функция) |
|
(C++26) | проверяет, является ли отражённая сущность шаблоном конструктора (функция) |
|
(C++26) | проверяет, представляет ли отражение концепт (функция) |
|
(C++26) | проверяет, получена ли отражённая сущность подстановкой аргументов шаблона в шаблон (функция) |
|
(C++26) | получает аргументы шаблона отражённой сущности (функция) |
|
(C++26) | определяет шаблон, использованный для создания экземпляра отражённой сущности (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/is_template