Namespaces
Variants

std::experimental::propagate_const<T>:: propagate_const

From cppreference.net
constexpr propagate_const ( ) = default ;
(1) (библиотека fundamentals TS v2)
constexpr propagate_const ( propagate_const && p ) = default ;
(2) (библиотека fundamentals TS v2)
template < class U >
/* см. ниже */ constexpr propagate_const ( propagate_const < U > && pu ) ;
(3) (библиотека fundamentals TS v2)
template < class U >
/* см. ниже */ constexpr propagate_const ( U && u ) ;
(4) (библиотека fundamentals TS v2)
propagate_const ( const propagate_const & ) = delete ;
(5) (библиотека fundamentals TS v2)

Пусть t_ обозначает приватный член данных, который является обернутым указатель-подобным объектом.

1) Создает объект propagate_const , выполняя инициализацию по умолчанию для this - > t_ .
2) Явно заданный перемещающий конструктор, который перемещающий конструирует this - > t_ из p. t_ .
3) Инициализирует this - > t_ как при прямой несписочной инициализации из выражения std :: move ( pu. t_ ) .
Этот конструктор не участвует в разрешении перегрузки, если только std:: is_constructible < T, U > :: value не равно true , и является explicit тогда и только тогда, когда std:: is_convertible < U, T > :: value равно false .
4) Инициализирует this - > t_ как при прямой несписочной инициализации выражением std:: forward < U > ( u ) .
Этот конструктор не участвует в разрешении перегрузки, если только std:: is_constructible < T, U > :: value не равен true и std:: decay_t < U > не является специализацией propagate_const . Этот конструктор является explicit тогда и только тогда, когда std:: is_convertible < U, T > :: value равен false .
5) Конструктор копирования явно удален. propagate_const не поддерживает копирование.

Параметры

p - другой объект propagate_const для перемещения
pu - другой объект propagate_const другой специализации для перемещения
u - другой объект для инициализации содержащегося указателя

Примечания

В Фундаментальной технической спецификации библиотеки v2 (основанной на C++14), (4) и (5) обычно реализуются в виде пар перегрузок explicit /не- explicit . Начиная с Фундаментальной технической спецификации библиотеки v3 (основанной на C++20), они могут быть реализованы с помощью условных спецификаторов explicit .