Spec-Zone.ru › C++

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

См. также

is_lvalue_reference
(C++11)
проверяет, является ли тип ссылкой на левую часть
(шаблон класса)
is_rvalue_reference
(C++11)
проверяет, является ли тип ссылкой на правую часть
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_reference

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API