X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2FMath.h;h=e31335a118032be65c96d7425da6b0f534ea061e;hb=58a70372d16f13a952ecc046fa90ce055fb6f36a;hp=6b61a2cc1b9fa0d9d954b5577981f27a9e7fcf42;hpb=ed8c80a0e0988e4ce687f51ca832a00e4a6b7930;p=folly.git diff --git a/folly/Math.h b/folly/Math.h index 6b61a2cc..e31335a1 100644 --- a/folly/Math.h +++ b/folly/Math.h @@ -132,9 +132,10 @@ constexpr auto kIntegerDivisionGivesRemainder = true; template inline constexpr detail::IdivResultType divFloor(N num, D denom) { using R = decltype(num / denom); - return kIntegerDivisionGivesRemainder && std::is_signed::value - ? detail::divFloorBranchless(num, denom) - : detail::divFloorBranchful(num, denom); + return detail::IdivResultType( + kIntegerDivisionGivesRemainder && std::is_signed::value + ? detail::divFloorBranchless(num, denom) + : detail::divFloorBranchful(num, denom)); } /** @@ -151,9 +152,10 @@ inline constexpr detail::IdivResultType divFloor(N num, D denom) { template inline constexpr detail::IdivResultType divCeil(N num, D denom) { using R = decltype(num / denom); - return kIntegerDivisionGivesRemainder && std::is_signed::value - ? detail::divCeilBranchless(num, denom) - : detail::divCeilBranchful(num, denom); + return detail::IdivResultType( + kIntegerDivisionGivesRemainder && std::is_signed::value + ? detail::divCeilBranchless(num, denom) + : detail::divCeilBranchful(num, denom)); } /** @@ -175,7 +177,7 @@ inline constexpr detail::IdivResultType divCeil(N num, D denom) { */ template inline constexpr detail::IdivResultType divTrunc(N num, D denom) { - return num / denom; + return detail::IdivResultType(num / denom); } /** @@ -193,9 +195,10 @@ inline constexpr detail::IdivResultType divTrunc(N num, D denom) { template inline constexpr detail::IdivResultType divRoundAway(N num, D denom) { using R = decltype(num / denom); - return kIntegerDivisionGivesRemainder && std::is_signed::value - ? detail::divRoundAwayBranchless(num, denom) - : detail::divRoundAwayBranchful(num, denom); + return detail::IdivResultType( + kIntegerDivisionGivesRemainder && std::is_signed::value + ? detail::divRoundAwayBranchless(num, denom) + : detail::divRoundAwayBranchful(num, denom)); } } // namespace folly