是的,这是编译器错误。函数指针必须具有兼容的异常说明符才能赋值。
引用标准:
  15.4 异常规范
  
  (5) ...类似的限制适用于函数指针、成员函数指针和函数引用的赋值和初始化:目标实体应至少允许赋值或初始化中源值允许的异常。
例子:
class A;
void (*pf1)(); // no exception specification
void (*pf2)() throw(A);
pf1 = pf2; // OK: pf1 is less restrictive
pf2 = pf1; // error: pf2 is more restrictive
您使用Comeau编译的代码会incompatible exception specifications出现错误:
Comeau C/C++ 4.3.10.1 (Oct  6 2008 11:28:09) for ONLINE_EVALUATION_BETA2
Copyright 1988-2008 Comeau Computing.  All rights reserved.
MODE:strict errors C++ C++0x_extensions
"ComeauTest.c", line 9: error: incompatible exception specifications
  pf=foo; // This should NOT work 
    ^
正如许多其他人提到的,除了规范之外,C++11 标准(参见附录 D.4)中已弃用异常noexcept规范。所以最好的做法是(并且曾经) -避免使用它。