为什么在 std::max 的 libstdc++ 实现中避免了三元条件?

Why is a ternary conditional avoided in libstdc++ implementation of std::max?

<algorithm> header 的 libstdc++ 实现中,我的系统中的一部分驻留在 /usr/include/c++/8/bits/stl_algobase.h 中,我可以看到 std::max 的以下实现:

template<typename _Tp>
  _GLIBCXX14_CONSTEXPR
  inline const _Tp&
  max(const _Tp& __a, const _Tp& __b)
  {
    // concept requirements
    __glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
    //return  __a < __b ? __b : __a;
    if (__a < __b)
      return __b;
    return __a;
  }

可以看到单条语句中的三元条件运算符?:被注释掉了,取而代之的是基于if的代码

我想这有一些技术原因。那么注释掉的版本会出什么问题而不是活动的版本呢?或者它们是否完全相同,活动版本只是让 step-by-step 调试更容易?

gcc 中存在条件运算符实现错误,例如 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53000。可能这是为了避免那些。