std:: reference_constructs_from_temporary
|
Défini dans l'en-tête
<type_traits>
|
||
|
template
<
class
T,
class
U
>
struct reference_constructs_from_temporary ; |
(depuis C++23) | |
Soit
V
défini comme
std::
remove_cv_t
<
U
>
si
U
est un type scalaire ou
cv
void
, ou
U
sinon. Si
T
est un type référence, et étant donnée une expression hypothétique
e
telle que
decltype
(
e
)
est
V
, la définition de variable
T ref
(
e
)
;
est bien formée et
lie un objet temporaire
à
ref
, alors fournit la constante membre
value
égale à
true
. Sinon,
value
est
false
.
Si
T
est un type référence lvalue vers un type d'objet qualifié const mais non volatile ou un type référence rvalue, alors
std::
remove_reference_t
<
T
>
et
std::
remove_reference_t
<
U
>
doivent être des
types complets
,
cv
void
, ou des
tableaux de taille inconnue
; sinon le comportement est indéfini.
Si l'instanciation d'un template ci-dessus dépend, directement ou indirectement, d'un type incomplet, et que cette instanciation pourrait produire un résultat différent si ce type était hypothétiquement complété, le comportement est indéfini.
Si le programme ajoute des spécialisations pour
std::reference_constructs_from_temporary
ou
std::reference_constructs_from_temporary_v
, le comportement est indéfini.
Table des matières |
Modèle de variable d'assistance
|
template
<
class
T,
class
U
>
inline
constexpr
bool
reference_constructs_from_temporary_v
=
|
(depuis C++23) | |
Hérité de std:: integral_constant
Constantes membres
|
value
[static]
|
true
si
T
est un type référence, une valeur
U
peut être liée à
T
dans l'initialisation directe, et un objet temporaire serait lié à la référence,
false
sinon
(constante membre publique statique) |
Fonctions membres
|
operator bool
|
convertit l'objet en
bool
, retourne
value
(fonction membre publique) |
|
operator()
(C++14)
|
retourne
value
(fonction membre publique) |
Types membres
| Type | Définition |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Notes
std::reference_constructs_from_temporary
peut être utilisé pour rejeter certains cas qui produisent toujours des références pendantes.
Il est également possible d'utiliser la liste d'initialisation des membres pour rejeter la liaison d'un objet temporaire à une référence si le compilateur a implémenté CWG1696 .
Exemple
#include <type_traits> static_assert(std::reference_constructs_from_temporary_v<int&&, int> == true); static_assert(std::reference_constructs_from_temporary_v<const int&, int> == true); static_assert(std::reference_constructs_from_temporary_v<int&&, int&&> == false); static_assert(std::reference_constructs_from_temporary_v<const int&, int&&> == false); static_assert(std::reference_constructs_from_temporary_v<int&&, long&&> == true); static_assert(std::reference_constructs_from_temporary_v<int&&, long> == true); int main() {}
Voir aussi
|
(C++11)
(C++11)
(C++11)
|
vérifie si un type a un constructeur pour des arguments spécifiques
(modèle de classe) |
construit un nouveau
tuple
(fonction membre publique de
std::tuple<Types...>
)
|
|
construit une nouvelle
pair
(fonction membre publique de
std::pair<T1,T2>
)
|
|
|
(C++17)
|
construit un objet avec un tuple d'arguments
(modèle de fonction) |