我不知道如何調用的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)。 –