我不知道如何调用的std::make_optional
这两个重载得到解决:函数模板重载分辨率混乱
template< class T >
constexpr std::optional<std::decay_t<T>> make_optional(T&& value);
template< class T, class... Args >
constexpr std::optional<T> make_optional(Args&&... args);
我知道没有明确的模板参数像make_optional(123)
将调用第一个调用,但如何make_optional<int>(123)
?哪些超载将被选择,以及按照什么规则?
UPDATE:如果我写说make_optional<string>("hello world")
,我会调用第二个重载(即使字符串文字可以被隐式转换为string
),是否正确?
库(和名称空间)在哪里声明它们? ['std :: experimental'](http://en.cppreference.com/w/cpp/header/experimental/optional)似乎只定义了第一个。 – Nawaz
@Nawaz:'make_optional'的第二个重载来自[P0032(PDF)](http://wg21.link/P0032),它[在Oulu之前转发给LWG](https://issues.isocpp.org /show_bug.cgi?id=100),显然。虽然P0091可能会使它过时,所以他们可能没有采用它。所以目前纳瓦兹是正确的:第二次超载不存在。 –
@NicolBolas [它存在](https://github.com/cplusplus/draft/commit/1882aa320a101fcfdb7a6d4de40197982209ce30)。 –