2323#include < boost/math/special_functions/math_fwd.hpp>
2424#include < boost/math/tools/assert.hpp>
2525#include < boost/math/special_functions/fpclassify.hpp>
26+ #include < boost/math/concepts/concepts.hpp>
2627
2728#if defined(__GNUC__) && defined(BOOST_MATH_USE_FLOAT128)
2829//
@@ -293,7 +294,7 @@ const typename log1p_initializer<T, Policy, tag>::init log1p_initializer<T, Poli
293294
294295} // namespace detail
295296
296- template <class T , class Policy >
297+ template <BOOST_MATH_ARBITRARY_REAL T, BOOST_MATH_POLICY Policy>
297298inline typename tools::promote_args<T>::type log1p (T x, const Policy&)
298299{
299300 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&)
327328
328329#if defined(BOOST_HAS_LOG1P) && !(defined(__osf__) && defined(__DECCXX_VER))
329330# ifdef BOOST_MATH_USE_C99
330- template <class Policy >
331+ template <BOOST_MATH_POLICY Policy>
331332inline float log1p (float x, const Policy& pol)
332333{
333334 if (x < -1 )
@@ -339,7 +340,7 @@ inline float log1p(float x, const Policy& pol)
339340 return ::log1pf (x);
340341}
341342#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
342- template <class Policy >
343+ template <BOOST_MATH_POLICY Policy>
343344inline long double log1p (long double x, const Policy& pol)
344345{
345346 if (x < -1 )
@@ -352,7 +353,7 @@ inline long double log1p(long double x, const Policy& pol)
352353}
353354#endif
354355#else
355- template <class Policy >
356+ template <BOOST_MATH_POLICY Policy>
356357inline float log1p (float x, const Policy& pol)
357358{
358359 if (x < -1 )
@@ -364,7 +365,7 @@ inline float log1p(float x, const Policy& pol)
364365 return ::log1p (x);
365366}
366367#endif
367- template <class Policy >
368+ template <BOOST_MATH_POLICY Policy>
368369inline double log1p (double x, const Policy& pol)
369370{
370371 if (x < -1 )
@@ -381,7 +382,7 @@ inline double log1p(double x, const Policy& pol)
381382// that your compilers optimizer won't mess this code up!!
382383// Currently tested with VC8 and Intel 9.1.
383384//
384- template <class Policy >
385+ template <BOOST_MATH_POLICY Policy>
385386inline double log1p (double x, const Policy& pol)
386387{
387388 if (x < -1 )
@@ -396,7 +397,7 @@ inline double log1p(double x, const Policy& pol)
396397 else
397398 return ::log (u)*(x/(u-1.0 ));
398399}
399- template <class Policy >
400+ template <BOOST_MATH_POLICY Policy>
400401inline float log1p (float x, const Policy& pol)
401402{
402403 return static_cast <float >(boost::math::log1p (static_cast <double >(x), pol));
@@ -406,7 +407,7 @@ inline float log1p(float x, const Policy& pol)
406407// For some reason this fails to compile under WinCE...
407408// Needs more investigation.
408409//
409- template <class Policy >
410+ template <BOOST_MATH_POLICY Policy>
410411inline long double log1p (long double x, const Policy& pol)
411412{
412413 if (x < -1 )
@@ -424,15 +425,15 @@ inline long double log1p(long double x, const Policy& pol)
424425#endif
425426#endif
426427
427- template <class T >
428+ template <BOOST_MATH_ARBITRARY_REAL T>
428429inline typename tools::promote_args<T>::type log1p (T x)
429430{
430431 return boost::math::log1p (x, policies::policy<>());
431432}
432433//
433434// Compute log(1+x)-x:
434435//
435- template <class T , class Policy >
436+ template <BOOST_MATH_ARBITRARY_REAL T, BOOST_MATH_POLICY Policy>
436437inline typename tools::promote_args<T>::type
437438 log1pmx (T x, const Policy& pol)
438439{
@@ -464,7 +465,7 @@ inline typename tools::promote_args<T>::type
464465 return result;
465466}
466467
467- template <class T >
468+ template <BOOST_MATH_ARBITRARY_REAL T>
468469inline typename tools::promote_args<T>::type log1pmx (T x)
469470{
470471 return log1pmx (x, policies::policy<>());
0 commit comments