title: There is no matching specific subroutine for this type bound generic subroutine call
body: <p>I have a type with two bound procedures (GetAsScalar &amp; GetAsList) under a generic procedure (GetValue):</p>
  
  <pre><code>type, extends(TObject)  ::  TKeyword
      character(len=:), allocatable               ::  fValue
  
  contains
      procedure, private                          ::  GetAsScalar
      procedure, private                          ::  GetAsList        
  
      generic                                     ::  GetValue    =&gt;  &amp;
                                                      GetAsScalar,    &amp;
                                                      GetAsList
  end type TKeyword
  </code></pre>
  
  <p>The routines signatures are these:</p>
  
  <pre><code>subroutine GetAsScalar (this, value, status)
      !Arguments-------------------------------------------------------------
      class(TKeyword)                                 ::  this
      class(*), target                                ::  value
      logical, optional                               ::  status
  
      !...
  end subroutine GetAsScalar
  
  subroutine GetAsList (this, value, status)
      !Arguments-------------------------------------------------------------
      class(TKeyword)                                 ::  this
      class(*), pointer                               ::  value(:)
      logical, optional                               ::  status
  
      !...
  end subroutine GetAsList
  </code></pre>
  
  <p>Internally, the TKeyword object stores a string.</p>
  
  <p>If I try to use it in the following way (bellow), I get a compilation error: "There is no matching specific subroutine for this type bound generic subroutine call"</p>
  
  <pre><code>class(TKeyword), pointer :: key
  class(*), pointer :: p(:)
  allocate (integer::p(3))
  
  !Code to read instantiate the TKeyword object
  
  call key%GetValue(p, status)
  
  select type (p)
  type is (integer)
      write (*,*) p
  end select
  </code></pre>
  
  <p>If I remove the GetASScalar from the generic association and make it public, the following code works as expected:</p>
  
  <pre><code>class(TKeyword), pointer :: key
  class(*), pointer :: p(:)
  allocate (integer::p(3))
  
  !Code to read instantiate the TKeyword object
  
  call key%GetAsList(p, status)
  
  select type (p)
  type is (integer)
      write (*,*) p
  end select
  </code></pre>
  
  <p>When passing a scalar (integer, real, character, etc), the GetAsScalar routine is called without problems.</p>
  
  <p>I would like to know why this is happening. What am I missing in this "generic thing" that makes the compiler unable to recognize my subroutine under the generic? There is a way to make this work? Would be something related with the routine signature?</p>
  
  <p>I'm using Intel Fortran 15.0.1.148</p>