D1에서는 아래와 같은 C스타일 함수포인터 선언이 가능했다.
typedef int (*functionName) (int a, int b);


D2부터는 C스타일의 함수 포인터 선언이 불가능해지고 D스타일 함수 포인터만을 사용해야 한다. (D2에서 typedef가 폐기된 영향으로 추측된다) 선언 형식은 다음과 같다.

alias [반환형] function ([매개변수 목록]) [이름];

대리자 포인터의 경우 function 대신 delegate를 사용하면 된다. 선언한 함수 포인터 변수에는 일반적인 함수의 주소, 또는 함수 리터럴을 대입할 수 있다. 함수 포인터 변수에 대리자 리터럴을 담을 수는 없다.

 
alias int function(string b) func;

int foo(string b)
{
	writeln(b);
	
	return 0;
}

void main()
{
	func f;
	
	f = &foo;
	
	f("hello D!");
	
	f = function(string b)
	{
		writeln(b);
		return 1;
	};
	
	f("hello D!");
}