std:: is_same
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<type_traits>
|
||
|
template
<
class
T,
class
U
>
struct is_same ; |
(depuis C++11) | |
Si
T
et
U
désignent le même type (en prenant en compte les qualifications const/volatile), fournit la constante membre
value
égale à
true
. Sinon,
value
est
false
.
La commutativité est satisfaite, c'est-à-dire que pour deux types quelconques
T
et
U
,
is_same
<
T, U
>
::
value
==
true
si et seulement si
is_same
<
U, T
>
::
value
==
true
.
Si le programme ajoute des spécialisations pour
std::is_same
ou
std::is_same_v
(depuis C++17)
, le comportement est indéfini.
Table des matières |
Modèle de variable d'assistance
|
template
<
class
T,
class
U
>
constexpr bool is_same_v = is_same < T, U > :: value ; |
(depuis C++17) | |
Hérité de std:: integral_constant
Constantes membres
|
value
[static]
|
true
si
T
et
U
sont le même type,
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 > |
Implémentation possible
template<class T, class U> struct is_same : std::false_type {}; template<class T> struct is_same<T, T> : std::true_type {}; |
Exemple
#include <cstdint> #include <iostream> #include <type_traits> #define SHOW(...) std::cout << #__VA_ARGS__ << " : " << __VA_ARGS__ << '\n' int main() { std::cout << std::boolalpha; // quelques faits dépendants de l'implémentation // généralement vrai si 'int' est sur 32 bits SHOW( std::is_same<int, std::int32_t>::value ); // peut-être vrai // potentiellement vrai si le modèle de données ILP64 est utilisé SHOW( std::is_same<int, std::int64_t>::value ); // peut-être faux // mêmes tests que ci-dessus, mais utilisant le format std::is_same_v<T, U> de C++17 SHOW( std::is_same_v<int, std::int32_t> ); // peut-être vrai SHOW( std::is_same_v<int, std::int64_t> ); // peut-être faux // comparer les types de quelques variables long double num1 = 1.0; long double num2 = 2.0; static_assert( std::is_same_v<decltype(num1), decltype(num2)> == true ); // 'float' n'est jamais un type intégral static_assert( std::is_same<float, std::int32_t>::value == false ); // 'int' est implicitement 'signed' static_assert( std::is_same_v<int, int> == true ); static_assert( std::is_same_v<int, unsigned int> == false ); static_assert( std::is_same_v<int, signed int> == true ); // contrairement aux autres types, 'char' n'est ni 'unsigned' ni 'signed' static_assert( std::is_same_v<char, char> == true ); static_assert( std::is_same_v<char, unsigned char> == false ); static_assert( std::is_same_v<char, signed char> == false ); // un type T qualifié const n'est pas identique à T non-const static_assert( !std::is_same<const int, int>() ); } #undef SHOW
Sortie possible :
std::is_same<int, std::int32_t>::value : true std::is_same<int, std::int64_t>::value : false std::is_same_v<int, std::int32_t> : true std::is_same_v<int, std::int64_t> : false
Voir aussi
|
(C++20)
|
spécifie qu'un type est identique à un autre type
(concept) |
decltype
spécificateur
(C++11)
|
obtient le type d'une expression ou d'une entité |