Because the Fortran rules say so
Fortran 2008 (ISO/IEC 1539-1:2010):
5.3.14 POINTER attribute
1 Entities with the POINTER attribute can be associated with different data objects or procedures during execution
of a program. A pointer is either a data pointer or a procedure
pointer. Procedure pointers are described in
12.4.3.6.
This is not compatible with constants.
Why are the rules as this? Because the authors of the standard made it so.
Why they did it like that? The answer for this is very often very simple - because nobody presented a different rule to be discussed and approved by the committee, or that some members of the committee didn't like it. You really have to ask them - J3 and SC22/WG5, but be prepared to the answer that there is no specific reason for that.
In some languages which fall in the same category, e.g. C and C++, constant pointers are possible. A constant pointer initialized to point to an integer constant
const int i = 3;
static int* const x=(int*)&i;
A constant pointer initialized to point to an integer function
int fun(){
return 1;
}
static int (* const x)()=&fun;
It would be definitely possible to allow something like that in Fortran. Contact your representative in the Fortran standards committee to suggest such a feature.
There are ways ti circumvent this restriction as shown by IanH and credondo, but this answers tries to stay i the line of the original question. Why this restriction exists?