Namespaces
Variants

руководства по выводу типов для std::optional

С сайта ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования возможностей библиотеки (C++20)
Утилиты программ
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
Функции сравнения целых чисел
(C++20)(C++20)(C++20)    
(C++20)
Обмен и операции с типами
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общеупотребительные типы-словари
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Определён в заголовке <optional>
template< class T >
optional(T) -> optional<T>;
(начиная с C++17)

Одно руководство по выводу типов предоставлено для std::optional для учёта граничных случаев, пропущенных неявными руководствами по выводу, в частности, аргументов, не подлежащих копированию, и преобразования массива в указатель.

Пример

#include <optional>
#include <type_traits>
int main()
{
    int a[2];
    std::optional oa{a}; // использует явный направляющий вывод
    static_assert(std::is_same_v<decltype(oa), std::optional<int*>> == true);
}