|
|
When applied to an expression of polymorphic type, evaluation of a typeid expression may involve runtime overhead (a virtual table lookup), otherwise typeid expression is resolved at compile time. |
coder777 wrote: |
---|
Does it even make sense to have a name of an object that cannot be an object? |
void
too: https://ideone.com/1PSGzH
|
|
typeid
or sizeof
.template <class... Tuples> constexpr tuple<CTypes...> tuple_cat(Tuples&&... tpls); In the following paragraphs, let Ti be the ith type in Tuples, Ui be remove_reference_t<Ti>, and tpi be the ith parameter in the function parameter pack tpls, where all indexing is zero-based. Requires: For all i, Ui shall be the type cvi tuple<Argsi ...>, where cvi is the (possibly empty) ith cv-qualifier-seq and Argsi is the parameter pack representing the element types in Ui . Let Aik be the kith type in Argsi . For all Aik the following requirements shall be satisfied: If Ti is deduced as an lvalue reference type, then is_constructible<Aik , cvi Aik&>::value == true, otherwise is_constructible<Aik , cvi Aik&&>::value == true. |