I was just trying to use `pdf_norm`

from the `stdlib`

until my compiler kindly gave me the bad news that this function is impure… As such, it can’t be used in pure procedures and `do concurrent`

loops, which, IMO, significantly limits its practical application. Probably, the same occurs in many other `stdlib`

modules/procedures.

As far as I can see it, the impure attribute comes from the choice of calling the impure procedure `error_stop()`

… Hence, my question:

- Is the “benefit” of calling the impure procedure
`error_stop()`

– versus what could be achieved with a*pure*`error stop message`

– really worth the cost of downgrading the whole procedure to impure?

```
#:for k1, t1 in REAL_KINDS_TYPES
impure elemental function pdf_norm_${t1[0]}$${k1}$(x, loc, scale) result(res)
!
! Normal distribution probability density function
!
${t1}$, intent(in) :: x, loc, scale
${t1}$ :: res
${t1}$, parameter :: sqrt_2_pi = sqrt(2.0_${k1}$ * acos(-1.0_${k1}$))
if(scale == 0._${k1}$) call error_stop("Error(pdf_norm): Normal" &
//"distribution scale parameter must be non-zero")
res = exp(- 0.5_${k1}$ * ((x - loc) / scale) * (x - loc) / scale) / &
(sqrt_2_Pi * scale)
end function pdf_norm_${t1[0]}$${k1}$
#:endfor
```