23
23
#include < boost/math/special_functions/math_fwd.hpp>
24
24
#include < boost/math/tools/assert.hpp>
25
25
#include < boost/math/special_functions/fpclassify.hpp>
26
+ #include < boost/math/concepts/concepts.hpp>
26
27
27
28
#if defined(__GNUC__) && defined(BOOST_MATH_USE_FLOAT128)
28
29
//
@@ -293,7 +294,7 @@ const typename log1p_initializer<T, Policy, tag>::init log1p_initializer<T, Poli
293
294
294
295
} // namespace detail
295
296
296
- template <class T , class Policy >
297
+ template <BOOST_MATH_ARBITRARY_REAL T, BOOST_MATH_POLICY Policy>
297
298
inline typename tools::promote_args<T>::type log1p (T x, const Policy&)
298
299
{
299
300
typedef typename tools::promote_args<T>::type result_type;
@@ -327,7 +328,7 @@ inline typename tools::promote_args<T>::type log1p(T x, const Policy&)
327
328
328
329
#if defined(BOOST_HAS_LOG1P) && !(defined(__osf__) && defined(__DECCXX_VER))
329
330
# ifdef BOOST_MATH_USE_C99
330
- template <class Policy >
331
+ template <BOOST_MATH_POLICY Policy>
331
332
inline float log1p (float x, const Policy& pol)
332
333
{
333
334
if (x < -1 )
@@ -339,7 +340,7 @@ inline float log1p(float x, const Policy& pol)
339
340
return ::log1pf (x);
340
341
}
341
342
#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
342
- template <class Policy >
343
+ template <BOOST_MATH_POLICY Policy>
343
344
inline long double log1p (long double x, const Policy& pol)
344
345
{
345
346
if (x < -1 )
@@ -352,7 +353,7 @@ inline long double log1p(long double x, const Policy& pol)
352
353
}
353
354
#endif
354
355
#else
355
- template <class Policy >
356
+ template <BOOST_MATH_POLICY Policy>
356
357
inline float log1p (float x, const Policy& pol)
357
358
{
358
359
if (x < -1 )
@@ -364,7 +365,7 @@ inline float log1p(float x, const Policy& pol)
364
365
return ::log1p (x);
365
366
}
366
367
#endif
367
- template <class Policy >
368
+ template <BOOST_MATH_POLICY Policy>
368
369
inline double log1p (double x, const Policy& pol)
369
370
{
370
371
if (x < -1 )
@@ -381,7 +382,7 @@ inline double log1p(double x, const Policy& pol)
381
382
// that your compilers optimizer won't mess this code up!!
382
383
// Currently tested with VC8 and Intel 9.1.
383
384
//
384
- template <class Policy >
385
+ template <BOOST_MATH_POLICY Policy>
385
386
inline double log1p (double x, const Policy& pol)
386
387
{
387
388
if (x < -1 )
@@ -396,7 +397,7 @@ inline double log1p(double x, const Policy& pol)
396
397
else
397
398
return ::log (u)*(x/(u-1.0 ));
398
399
}
399
- template <class Policy >
400
+ template <BOOST_MATH_POLICY Policy>
400
401
inline float log1p (float x, const Policy& pol)
401
402
{
402
403
return static_cast <float >(boost::math::log1p (static_cast <double >(x), pol));
@@ -406,7 +407,7 @@ inline float log1p(float x, const Policy& pol)
406
407
// For some reason this fails to compile under WinCE...
407
408
// Needs more investigation.
408
409
//
409
- template <class Policy >
410
+ template <BOOST_MATH_POLICY Policy>
410
411
inline long double log1p (long double x, const Policy& pol)
411
412
{
412
413
if (x < -1 )
@@ -424,15 +425,15 @@ inline long double log1p(long double x, const Policy& pol)
424
425
#endif
425
426
#endif
426
427
427
- template <class T >
428
+ template <BOOST_MATH_ARBITRARY_REAL T>
428
429
inline typename tools::promote_args<T>::type log1p (T x)
429
430
{
430
431
return boost::math::log1p (x, policies::policy<>());
431
432
}
432
433
//
433
434
// Compute log(1+x)-x:
434
435
//
435
- template <class T , class Policy >
436
+ template <BOOST_MATH_ARBITRARY_REAL T, BOOST_MATH_POLICY Policy>
436
437
inline typename tools::promote_args<T>::type
437
438
log1pmx (T x, const Policy& pol)
438
439
{
@@ -464,7 +465,7 @@ inline typename tools::promote_args<T>::type
464
465
return result;
465
466
}
466
467
467
- template <class T >
468
+ template <BOOST_MATH_ARBITRARY_REAL T>
468
469
inline typename tools::promote_args<T>::type log1pmx (T x)
469
470
{
470
471
return log1pmx (x, policies::policy<>());
0 commit comments