|
262 | 262 | // \ref{meta.rel}, type relations
|
263 | 263 | template<class T, class U> struct is_same;
|
264 | 264 | template<class Base, class Derived> struct is_base_of;
|
| 265 | + template<class Base, class Derived> struct is_virtual_base_of; |
265 | 266 | template<class From, class To> struct is_convertible;
|
266 | 267 | template<class From, class To> struct is_nothrow_convertible;
|
267 | 268 | template<class T, class U> struct is_layout_compatible;
|
|
548 | 549 | constexpr bool @\libglobal{is_same_v}@ = is_same<T, U>::value;
|
549 | 550 | template<class Base, class Derived>
|
550 | 551 | constexpr bool @\libglobal{is_base_of_v}@ = is_base_of<Base, Derived>::value;
|
| 552 | + template<class Base, class Derived> |
| 553 | + constexpr bool @\libglobal{is_virtual_base_of_v}@ = is_virtual_base_of<Base, Derived>::value; |
551 | 554 | template<class From, class To>
|
552 | 555 | constexpr bool @\libglobal{is_convertible_v}@ = is_convertible<From, To>::value;
|
553 | 556 | template<class From, class To>
|
|
1463 | 1466 | without regard to cv-qualifiers &
|
1464 | 1467 | If \tcode{Base} and
|
1465 | 1468 | \tcode{Derived} are non-union class types and are
|
1466 |
| -not (possibly cv-qualified versions of) the same type, |
| 1469 | + not (possibly cv-qualified versions of) the same type, |
1467 | 1470 | \tcode{Derived} shall be a complete
|
1468 | 1471 | type.
|
1469 | 1472 | \begin{tailnote}
|
1470 |
| -Base classes that are private, protected, or ambiguous |
| 1473 | + Base classes that are private, protected, or ambiguous |
1471 | 1474 | are, nonetheless, base classes.
|
1472 | 1475 | \end{tailnote}
|
1473 | 1476 | \\ \rowsep
|
1474 | 1477 |
|
| 1478 | +\indexlibraryglobal{is_virtual_base_of}% |
| 1479 | +\tcode{template<class Base, class Derived>}\br |
| 1480 | + \tcode{struct is_virtual_base_of;} & |
| 1481 | + \tcode{Base} is a virtual base class of \tcode{Derived}\iref{class.mi} |
| 1482 | + without regard to cv-qualifiers. & |
| 1483 | + If \tcode{Base} and |
| 1484 | + \tcode{Derived} are non-union class types, |
| 1485 | + \tcode{Derived} shall be a complete type. |
| 1486 | + \begin{note} |
| 1487 | + Virtual base classes that are private, protected, or ambiguous |
| 1488 | + are, nonetheless, virtual base classes. |
| 1489 | + \end{note} |
| 1490 | + \begin{tailnote} |
| 1491 | + A class is never a virtual base class of itself. |
| 1492 | + \end{tailnote} \\ \rowsep |
| 1493 | + |
1475 | 1494 | \indexlibraryglobal{is_convertible}%
|
1476 | 1495 | \tcode{template<class From, class To>}\br
|
1477 | 1496 | \tcode{struct is_convertible;} &
|
|
1486 | 1505 | the conversion, as defined by \tcode{is_convertible},
|
1487 | 1506 | is known not to throw any exceptions\iref{expr.unary.noexcept} &
|
1488 | 1507 | \tcode{From} and \tcode{To} shall be complete types,
|
1489 |
| - \cv{}~\keyword{void}, or arrays of unknown bound. \\ \rowsep |
| 1508 | + \cv{}~\keyword{void}, or arrays of unknown bound. \\ \rowsep |
1490 | 1509 |
|
1491 | 1510 | \indexlibraryglobal{is_layout_compatible}%
|
1492 | 1511 | \tcode{template<class T, class U>}\br
|
|
0 commit comments