yur*_*hek 2 c++ function-pointers instantiation function-templates
是否有可能在以下设置中
template <typename T>
inline void id() {
//...
}
template <typename T>
bool check() {
return &id<T> == &id<T const>;
}
Run Code Online (Sandbox Code Playgroud)
check会回来true一些T吗?它取决于内部的工作id吗?标准对此有何看法?
当然.尝试const int或int&或void().
如果你通过一个或一个模板参数获得多个顶级const限定符,那么顶级限定符就会崩溃typedef,这意味着check<int const>()将返回true.
[规范性文本待定]
然后有一条规则忽略了const它无法处理的事物的顶级,比如引用或函数类型.这意味着check<int&>和check<int()>返回true.
§8.3.2 [dcl.ref] p1
除非通过使用typedef(7.1.3)或模板类型参数(14.3)引入cv限定符,否则Cv限定引用的格式不正确,在这种情况下,cv限定符将被忽略.
和
§4.4 [conv.qual] p3
[ 注意:函数类型(包括指向成员函数类型的指针)绝不是cv限定的(8.3.5).- 尾注 ]
§8.5.3 [dcl.fct] p6
一的效果CV-限定符-SEQ的函数声明是不一样的功能类型的顶部上添加CV-资格.在后一种情况下,忽略cv限定符.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |