Недавно я просмотрел реализация предоставленного шаблона функции 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?