@@ -142,19 +142,53 @@ constexpr Unsigned to_unsigned(Unsigned value) NOEXCEPT;
142142// / Floating point casts.
143143// / ---------------------------------------------------------------------------
144144
145- // / Cast floating point to integral integer, overflow guarded.
145+ // / Cast floating point to integral integer (truncated).
146+ // / True for any finite value that falls within Integer domain.
147+ // / False if fractional part is non-zero when whole is set true.
146148template <typename Integer = size_t , typename Float,
147149 if_integral_integer<Integer> = true ,
148150 if_floating_point<Float> = true >
149- constexpr bool to_integer (Integer& out, Float value) NOEXCEPT;
151+ inline bool to_integer (Integer& out, Float value, bool whole= true ) NOEXCEPT;
150152
151- // / Cast floating point to integral integer, overflow unguarded.
153+ // / Cast floating point to integral integer (ceilinged).
154+ // / Any non-finite value returns the integer domain maximum.
155+ // / Overflow/underflow is clamped to respective integer upper/lower limit.
156+ template <typename Integer = size_t , typename Float,
157+ if_integral_integer<Integer> = true ,
158+ if_floating_point<Float> = true >
159+ inline Integer to_ceilinged_integer (Float value) NOEXCEPT;
160+
161+ // / Cast floating point to integral integer (floored).
162+ // / Any non-finite value returns the integer domain maximum.
163+ // / Overflow/underflow is clamped to respective integer upper/lower limit.
164+ template <typename Integer = size_t , typename Float,
165+ if_integral_integer<Integer> = true ,
166+ if_floating_point<Float> = true >
167+ inline Integer to_floored_integer (Float value) NOEXCEPT;
168+
169+ // / Cast floating point to integral integer (rounded).
170+ // / Any non-finite value returns the integer domain maximum.
171+ // / Overflow/underflow is clamped to respective integer upper/lower limit.
172+ template <typename Integer = size_t , typename Float,
173+ if_integral_integer<Integer> = true ,
174+ if_floating_point<Float> = true >
175+ inline Integer to_rounded_integer (Float value) NOEXCEPT;
176+
177+ // / Cast floating point to integral integer (truncated).
178+ // / Any non-finite value returns the integer domain maximum.
179+ // / Overflow/underflow is clamped to respective integer upper/lower limit.
180+ template <typename Integer = size_t , typename Float,
181+ if_integral_integer<Integer> = true ,
182+ if_floating_point<Float> = true >
183+ inline Integer to_truncated_integer (Float value) NOEXCEPT;
184+
185+ // / Cast floating point to integral integer, overflow/underflow UNGUARDED.
152186template <typename Integer = size_t , typename Float,
153187 if_integral_integer<Integer> = true ,
154188 if_floating_point<Float> = true >
155189constexpr Integer to_integer (Float value) NOEXCEPT;
156190
157- // / Cast integral integer to floating point, overflow unguarded .
191+ // / Cast integral integer to floating point, overflow/underflow not possible .
158192template <typename Float = double , typename Integer,
159193 if_floating_point<Float> = true ,
160194 if_integral_integer<Integer> = true >
0 commit comments