我正在尝试使用以下C++模板:
_CONSTEXPR20 void swap(_Ty& _Left, _Ty& _Right) noexcept(
is_nothrow_move_constructible_v<_Ty>&& is_nothrow_move_assignable_v<_Ty>) {
_Ty _Tmp = _STD move(_Left);
_Left = _STD move(_Right);
_Right = _STD move(_Tmp);
}
来自Microsoft实用程序标准标头(核心(,但编译器继续使用以下模板:
inline void swap(thread& _Left, thread& _Right) noexcept {
_Left.swap(_Right);
}
来自Microsoft线程标准头。
如何强制编译器使用第一个实现?
如注释中所述,编译器更喜欢函数的非模板重载,而不是模板重载。
如果您需要使用模板版本,只需显式传递类型参数:
swap<std::thread>(thread1, thread2);