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