std:: is_scalar
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<type_traits>
|
||
|
template
<
class
T
>
struct is_scalar ; |
(depuis C++11) | |
std::is_scalar
est un
UnaryTypeTrait
.
Si
T
est un
type scalaire
, fournit la constante membre
value
égale à
true
. Pour tout autre type,
value
vaut
false
.
Si le programme ajoute des spécialisations pour
std::is_scalar
ou
std::is_scalar_v
, le comportement est indéfini.
Table des matières |
Paramètres du modèle
| T | - | un type à vérifier |
Modèle de variable d'assistance
|
template
<
class
T
>
constexpr bool is_scalar_v = is_scalar < T > :: value ; |
(depuis C++17) | |
Hérité de std:: integral_constant
Constantes membres
|
value
[static]
|
true
si
T
est un type scalaire,
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
Chaque emplacement de mémoire individuel dans le modèle de mémoire C++, y compris les emplacements de mémoire cachés utilisés par les fonctionnalités du langage (par exemple le pointeur de table virtuelle), a un type scalaire (ou est une séquence de champs de bits adjacents de longueur non nulle). L'ordonnancement des effets secondaires dans l'évaluation des expressions, la synchronisation inter-threads et l'ordonnancement des dépendances sont tous définis en termes d'objets scalaires individuels.
Implémentation possible
template<class T> struct is_scalar : std::integral_constant<bool, std::is_arithmetic<T>::value || std::is_enum<T>::value || std::is_pointer<T>::value || std::is_member_pointer<T>::value || std::is_null_pointer<T>::value> {}; |
Exemple
#include <iostream> #include <type_traits> #include <typeinfo> #include <utility> template<typename Head, typename... Tail> void are_scalars(Head&& head, Tail&&... tail) { using T = std::decay_t<decltype(head)>; std::cout << typeid(T).name() << " est " << (std::is_scalar_v<T> ? "" : "non ") << "un scalaire\n"; if constexpr (sizeof... (Tail)) { are_scalars(std::forward<decltype(tail)>(tail)...); } } int main() { struct S { int m; } s; int S::* mp = &S::m; enum class E { e }; are_scalars(42, 3.14, E::e, "str", mp, nullptr, s); }
Sortie possible :
int est un scalaire double est un scalaire main::E est un scalaire char const* est un scalaire int main::S::* est un scalaire nullptr est un scalaire main::S n'est pas un scalaire
Voir aussi
|
(C++11)
|
vérifie si un type est un type arithmétique
(modèle de classe) |
|
(C++11)
|
vérifie si un type est un type énumération
(modèle de classe) |
|
(C++11)
|
vérifie si un type est un type pointeur
(modèle de classe) |
|
(C++11)
|
vérifie si un type est un pointeur vers une fonction ou un objet membre non statique
(modèle de classe) |