std::is_reference
Определено в заголовке <type_traits> | ||
|---|---|---|
template< class T > struct is_reference; | (с C++11) |
std::is_reference является UnaryTypeTrait.
Если T является типом ссылки (ссылка на левую часть или ссылкой на правую часть), предоставляет стальную константу value равную true. Для любого другого типа value равно false.
Поведение программы, добавляющей специализации для std::is_reference или std::is_reference_v не определено.
Параметры шаблона
| T | - | тип для проверки |
Вспомогательный шаблон переменной
template< class T > inline constexpr bool is_reference_v = is_reference<T>::value; | (с C++17) |
Наследуется от std::integral_constant
Константы члена
| value
[static] | true если T является типом ссылки, false в противном случае (публичная статическая константа члена) |
Члены-функции
| operator bool | преобразует объект в bool, возвращает value (публичная функция-член) |
| operator()
(C++14) | возвращает value (публичная функция-член) |
Типы членов
| Тип | Определение |
|---|---|
value_type | bool |
type | std::integral_constant<bool, value> |
Возможная реализация
template<class T> struct is_reference : std::false_type {};
template<class T> struct is_reference<T&> : std::true_type {};
template<class T> struct is_reference<T&&> : std::true_type {}; |
Пример
#include <iostream>
#include <type_traits>
class A {};
int main()
{
# define REF(x) << #x " ?: " << x << '\n'
std::cout << std::boolalpha
REF(std::is_reference_v<A>)
REF(std::is_reference_v<A&>)
REF(std::is_reference_v<A&&>)
REF(std::is_reference_v<long>)
REF(std::is_reference_v<long&>)
REF(std::is_reference_v<long&&>)
REF(std::is_reference_v<double*>)
REF(std::is_reference_v<double*&>)
REF(std::is_reference_v<double*&&>);
# undef REF
}Вывод:
std::is_reference_v<A> ?: false std::is_reference_v<A&> ?: true std::is_reference_v<A&&> ?: true std::is_reference_v<long> ?: false std::is_reference_v<long&> ?: true std::is_reference_v<long&&> ?: true std::is_reference_v<double*> ?: false std::is_reference_v<double*&> ?: true std::is_reference_v<double*&&> ?: true
См. также
|
(C++11) | проверяет, является ли тип ссылкой на левую часть (шаблон класса) |
|
(C++11) | проверяет, является ли тип ссылкой на правую часть (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_reference