std::is_abstract
Определено в заголовке <type_traits> |
||
|---|---|---|
template< class T > struct is_abstract; |
(с C++11) |
std::is_abstract является UnaryTypeTrait.
Если T является абстрактным классом (то есть, не объединяющим классом, который объявляет или наследует как минимум одну чисто виртуальную функцию), предоставляет стальную константу value равную true. Для любого другого типа value равно false.
Если T является неполным типом не объеденяющего класса, поведение неопределено.
Поведение программы, добавляющей специализации для std::is_abstract или std::is_abstract_v неопределено.
Параметры шаблона
| T | - | тип для проверки |
Вспомогательный шаблон переменной
template< class T > inline constexpr bool is_abstract_v = is_abstract<T>::value; |
(с C++17) |
Наследуется от std::integral_constant
Стальные константы
| value
[static] |
true если T является типом абстрактного класса, false в противном случае (общедоступная стальная константа) |
Члены-функции
| operator bool |
преобразует объект в bool, возвращает value (общедоступная функция-член) |
| operator()
(C++14) |
возвращает value (общедоступная функция-член) |
Типы-члены
| Тип | Определение |
|---|---|
value_type |
bool |
type |
std::integral_constant<bool, value> |
Пример
#include <iostream>
#include <type_traits>
struct A { int m; };
static_assert(std::is_abstract_v<A> == false);
struct B { virtual void foo(); };
static_assert(std::is_abstract_v<B> == false);
struct C { virtual void foo() = 0; };
static_assert(std::is_abstract_v<C> == true);
struct D : C {};
static_assert(std::is_abstract_v<D> == true);
int main() {}Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применен к | Поведение как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 2015 | C++11 | поведение было неопределенным, еслиT является неполным типом объединения |
основная характеристика равнаstd::false_type в данном случае |
См. также
|
(C++11) |
проверяет, является ли тип классом, отличным от объединения (шаблон класса) |
|
(C++11) |
проверяет, является ли тип полиморфным классом (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_abstract