Недавно я взглянул на реализацию из std::not_fn
шаблона функции, предоставляемую gcc .
Тип возвращаемого значения:это шаблон функции _Not_fn
- шаблон класса-оболочки, который отрицает завернутый вызываемый объект.
Оказывается, что _Not_fn
конструктор принимает дополнительный параметр int
, который не являетсяявно используется:
template<typename _Fn2>
_Not_fn(_Fn2&& __fn, int)
: _M_fn(std::forward<_Fn2>(__fn)) { }
Вызов конструктора выглядит следующим образом:
template<typename _Fn>
inline auto not_fn(_Fn&& __fn)
noexcept(std::is_nothrow_constructible<std::decay_t<_Fn>, _Fn&&>::value)
{
return _Not_fn<std::decay_t<_Fn>>{std::forward<_Fn>(__fn), 0}; // <- 0 is passed here
}
Вопрос:
Какова цель этогодополнительный int
параметр?Зачем нужна gcc реализация?