std:: is_virtual_base_of
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
헤더 파일에 정의됨
<type_traits>
|
||
|
template
<
class
Base,
class
Derived
>
struct is_virtual_base_of ; |
(C++26부터) | |
std::is_virtual_base_of
는
BinaryTypeTrait
입니다.
만약
Base
가
virtual base class
인 경우
Derived
의 (cv-qualification은 무시하고), 멤버 상수
value
를
true
로 제공합니다. 그렇지 않으면
value
는
false
입니다.
만약
Base
와
Derived
가 모두 non-union 클래스 타입인 경우(cv-qualification 무시),
Derived
는
완전한 타입(complete type)
이어야 합니다; 그렇지 않으면 동작은 정의되지 않습니다.
프로그램이
std::is_virtual_base_of
또는
std::is_virtual_base_of_v
에 대한 특수화를 추가하는 경우, 그 동작은 정의되지 않습니다.
목차 |
헬퍼 변수 템플릿
|
template
<
class
Base,
class
Derived
>
constexpr bool is_virtual_base_of_v = is_virtual_base_of < Base, Derived > :: value ; |
(C++26부터) | |
std:: integral_constant 로부터 상속됨
멤버 상수
|
value
[static]
|
true
만약
Derived
가 가상 기본 클래스
Base
로부터 파생된 경우 (cv 한정자는 무시),
false
그렇지 않은 경우
(public static member constant) |
멤버 함수
|
operator bool
|
객체를
bool
로 변환,
value
반환
(public member function) |
|
operator()
(C++14)
|
value
반환
(public member function) |
멤버 타입
| 타입 | 정의 |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
참고 사항
std
::
is_virtual_base_of_v
<
A, B
>
는
A
가
B
의 private, protected, 또는 모호한(ambiguous) 기본 클래스인 경우에도
true
입니다.
만약
std
::
is_virtual_base_of_v
<
A, B
>
가
true
라면,
std::
is_base_of_v
<
A, B
>
또한
true
입니다. 그러나 역은 항상 성립하지는 않는데, 가상 상속 검사가 더 구체적이기 때문입니다. 이 경우,
std
::
is_virtual_base_of_v
<
T, T
>
는
false
입니다. 심지어
T
가 비-공용체 클래스 타입인 경우에도 마찬가지입니다.
예제
#include <type_traits> class A {}; class B : A {}; class C : B {}; class D : virtual A {}; class E : D {}; union F {}; using I = int; static_assert ( std::is_virtual_base_of_v<A, A> != true && std::is_virtual_base_of_v<A, B> != true && std::is_virtual_base_of_v<A, D> == true && std::is_virtual_base_of_v<D, E> != true && std::is_virtual_base_of_v<F, F> != true && std::is_virtual_base_of_v<I, I> != true ); int main() {}
참고 항목
|
(C++11)
|
한 타입이 다른 타입의 기반인지 검사합니다
(클래스 템플릿) |
|
(C++11)
(C++20)
|
한 타입이 다른 타입으로 변환 가능한지 검사합니다
(클래스 템플릿) |
|
(C++20)
|
한 타입이 다른 타입으로부터 파생되었음을 명시합니다
(컨셉트) |