23 General utilities library [utilities]

23.8 Storage for any type [any]

23.8.3 Class any [any.class]

23.8.3.1 Construction and destruction [any.cons]

constexpr any() noexcept;

Postconditions: has_­value() есть false.

any(const any& other);

Effects: Если other.has_­value() есть false, создает объект, не имеющий значения. В противном случае эквивалентно any(in_­place<T>, any_­cast<const T&>(other)) где T - тип содержащегося объекта.

Throws: Любые исключения, возникающие при вызове выбранного конструктора для содержащегося значения.

any(any&& other) noexcept;

Effects: Если other.has_­value() есть false, создает объект, не имеющий значения. В противном случае создает объект типа, any который содержит либо содержащийся объект other, либо содержит объект того же типа, созданный из содержащегося объекта, other рассматривая этот содержащийся объект как rvalue.

Postconditions: other остается в допустимом, но в остальном неуказанном состоянии.

template<class T> any(T&& value);

Пусть VT будет decay_­t<T>.

Requires: VT должны удовлетворять CopyConstructible требованиям.

Effects: Создает объект типа, any который содержит объект типа, VT инициализированный напрямую с помощью std​::​forward<T>(value).

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки, если VT он не относится к тому же типу, что и any, VT не является специализацией in_­place_­type_­tи не is_­copy_­constructible_­v<VT> является true.

Throws: Любое исключение, созданное выбранным конструктором VT.

template <class T, class... Args> explicit any(in_place_type_t<T>, Args&&... args);

Пусть VT будет decay_­t<T>.

Requires: VT должны удовлетворять CopyConstructible требованиям.

Effects: Инициализирует содержащееся значение, как если бы инициализирует объект типа напрямую без использования списка VT с аргументами std​::​forward<Args>(args)....

Postconditions: *this содержит значение типа VT.

Throws: Любое исключение, созданное выбранным конструктором VT.

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки , если is_­copy_­constructible_­v<VT> не true и is_­constructible_­v<VT, Args...> является true.

template <class T, class U, class... Args> explicit any(in_place_type_t<T>, initializer_list<U> il, Args&&... args);

Пусть VT будет decay_­t<T>.

Requires: VT должны удовлетворять CopyConstructible требованиям.

Effects: Инициализирует содержащееся значение, как если бы инициализирует объект типа напрямую без использования списка VT с аргументами il, std​::​forward<Args>(args)....

Postconditions: *this содержит значение.

Throws: Любое исключение, созданное выбранным конструктором VT.

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки , если is_­copy_­constructible_­v<VT> не true и is_­constructible_­v<VT, initializer_­list<U>&, Args...> является true.

~any();

Effects: Как будто мимо reset().