一些std::optional
构造函数使用这样的std::in_place_t
标记参数:
template< class... Args >
explicit optional( std::in_place_t, Args&&... args );
我看到这样的构造函数可以在没有就地标签的情况下实现,并使用一些enable_if
(SFINAE)魔法来不参与不情愿的重载,即:
template< class... Args >
explicit optional( Args&&... args );
为什么std::optional
's 的就地构造函数是用std::in_place_t
标签而不是一些enable_if
魔法(而且没有标签)实现的?
更新:问题略有更新,以强调我意识到简单地省略就地标签是行不通的。