# How to have a generic interface for both allocatable and non allocatable dummy?

**URL:** <https://fortran-lang.discourse.group/t/how-to-have-a-generic-interface-for-both-allocatable-and-non-allocatable-dummy/6114>\
**Category:** Help\
**Created:** [July 8, 2023, 8:45pm UTC](https://fortran-lang.discourse.group/t/how-to-have-a-generic-interface-for-both-allocatable-and-non-allocatable-dummy/6114 "2023-07-08T20:45:47Z")\
**Posts on this page:** 1\
**Showing post:** 19

<div class="post-metadata">

**Author:** ![mEm](https://avatars.discourse-cdn.com/v4/letter/m/90ced4/32.png) [@mEm](https://fortran-lang.discourse.group/u/mEm)\
**Post date:** [July 20, 2023, 9:23am UTC](https://fortran-lang.discourse.group/t/how-to-have-a-generic-interface-for-both-allocatable-and-non-allocatable-dummy/6114/19 "2023-07-20T09:23:02Z")

</div>

You mean when passed as argument to a procedure ?

Maybe use the `optional` attribute:

```auto
program main
   implicit none
   integer, target :: ints(4) = [1, 2, 3, 4]
   integer, allocatable, target :: iall(:)
   integer, pointer :: iptr(:) => null()

   call checkAlloc(1)
   call checkAlloc(ints)
   iptr => iall
   call checkAlloc(iall)
   call checkAlloc(iptr)
   allocate(iall(2))
   call checkAlloc(iall)
   call checkAlloc(iptr)
contains
   subroutine checkAlloc(var)
      integer, optional :: var(..)

      if (present(var)) then
         print *, ' Var is "allocated"'
         return
      endif
      print *, ' Var is NOT "allocated"'
   end subroutine
end program main

```

---

_[View the full topic](https://fortran-lang.discourse.group/t/how-to-have-a-generic-interface-for-both-allocatable-and-non-allocatable-dummy/6114)._
