C++ 使用指向相同函数的指针作为模板参数是否总是会导致相同的实例化?

C++ Will using a pointer to the same function as a template parameter always lead to the same instantiation?

我有一个以函数指针作为参数的模板函数,以及一个像这样的普通函数:

template <void()>
int foo() {static int c = 0; return ++c;}
void bar() {}

如果我理解正确的话,两个不同的函数指针可以有不同的二进制表示,即使使用它们会调用同一个函数。这是否也适用于将它们用作模板参数时?

将"pointers to bar"(在不同时间从不同地方获得,但调用函数指针会调用bar)传递给foo总是调用[=13=的同一个实例化]?

指向bar函数的任何两个指针应相等。摘自 C++ 11 规范草案:5.10 2 ... 如果两个指针都指向相同的函数,则它们比较相等 .

所以我无法想象为什么将不同的指针传递给 bar 会创建 foo 的不同实例化,因为所有这些指针根据规范都是相等的。