是否有可能在以下设置中
template <typename T>
inline void id() {
//...
}
template <typename T>
bool check() {
return &id<T> == &id<T const>;
}
对于某些check
, true
会返回T
吗?它取决于id
内的内容吗?该标准对此有何意见?
答案 0 :(得分:7)
不确定。试试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)。 -end note ]
§8.5.3 [dcl.fct] p6
cv-qualifier-seq 在函数声明符中的作用与在函数类型之上添加cv-qualification不同。 在后一种情况下,将忽略cv限定符。
答案 1 :(得分:0)
我希望这些功能是不相等的。标准肯定不要求它们相同但我怀疑它允许它们相同(我不知道在哪里寻找相应的子句)。