我们考虑以下代码:
templateclass Foo {}; template class Foo {}; template class Foo {};
当我尝试编译它(ideone)时,它无法告诉我两个模板特化是相同的.这通常是令人惊讶的,U*
并且U* const
是不同的东西(第二个是const指针).这有什么不对?
在确定函数的类型(通俗地称为其签名)时,将删除顶级cv限定符.
§8.3.5/ 5 ...使用以下规则确定函数的类型....生成参数类型列表后,在形成函数类型时,将删除修改参数类型的任何顶级cv限定符....
对于无效的函数指针或模板参数没有特殊规则.