|
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